附录
示例代码文件
本节包含的表格列出并简要描述了客户端版本的 GBase 8s JDBC Driver 提供的代码示例。
大多数示例可以通过更改连接 URL 的语法与客户端 JDBC 一起工作。有关更多信息,请参阅数据库 URL 的格式。
tools/udtudrmgr 目录和 demo/xml 目录中的示例仅适用 2.2 版本中的客户端 JDBC。
可用示例摘要
在以下两个目录中提供示例:
- 安装 GBase 8s JDBC Driver 软件的 demo 目录
- demo 目录下的 tools 目录
demo 目录中的示例
每个实例都具有自己的子目录。大多数目录包括描述示例以及如何运行这些示例的 README 文件。
目录 | 示例的类型 |
---|---|
basic | 显示一般数据库操作的示例 |
bson | 显示 IfxBSONObject 扩展类用法的示例,此类用于访问 GBase 8s BSON 数据类型 |
clob-blob | 使用智能大对象的示例 |
udt-distinct | 使用不透明类型和 DISTINCT 数据类型的示例(使用不透明类型的附加示例在udtudrmgr 目录中的示例) |
complex-types | 使用行和集合类型的示例 |
rmi | 使用远程方法调用的示例 |
stores7 | stores7 演示数据库 |
pickaseat | 使用 DataSource 对象的示例 |
connection-pool | 说明使用连接池的示例 |
proxy | 说明使用 HTTP 代理服务器的示例 |
xml | 说明存储和检索 XML 文件的示例 |
hdr | 说明使用高可用数据复制的示例 |
basic 目录中的示例
下表列出了 basic 目录中的文件。
示例程序名 | 描述 |
---|---|
autofree.java | 显示如何使用 IFX_AUTOFREE 环境变量 |
BatchUpdate.java | 显示如何发送批量更新到服务器 |
ByteType.java | 显示如何插入或选择包含 BYTE 列的表 |
CallOut1.java | 使用 CallableStatement 方法执行具有 OUT 参数的 C 函数 |
CallOut2.java | 使用 CallableStatement 方法执行具有 OUT 参数的 SPL 函数 |
CallOut3.java | 使用 IfmxCallableStatement.IfxRegisterOut Parameter() 方法执行具有 Boolean OUT 的 C 函数 |
CallOut4.java | 使用 IfmxCallableStatement.hasOutParameter() 方法执行具有 CLOB 类型 OUT 参数的 C 函数 |
CreateDB.java | 创建名为 testDB 的数据库 |
DBCENTURYSelect.java | 使用 getString() 方法检索日期字符串表示形式,其中四位数年份扩展是基于 DBCENTURY 属性值 |
DBCENTURYSelect2.java | 检索一个日期字符串表示形式,其中四位数年份扩展是基于 DBCENTURY 属性值,使用字符串到二进制的转换 使用 getDate() 方法创建日期字符串表示形式所基于的 java.sql.Date 对象 |
DBCENTURYSelect3.java | 检索一个日期字符串表示形式,其中四位数展开式基于 DBCENTURY 属性值,使用字符串到二进制的转换 使用 getTimestamp() 方法来构建日期字符串表示形式所基于的 java.sql.Timestamp 对象 |
DBCENTURYSelect4.java | 检索一个日期字符串表示形式,其中四位数展开式基于 DBCENTURY 属性值,使用二进制到字符串的转换 使用 getDate() 方法来构建日期字符串表示形式所基于的 java.sql.Date 对象 |
DBCENTURYSelect5.java | 检索一个日期字符串表示形式,其中四位数展开式基于 DBCENTURY 属性值,使用二进制到字符串的转换 使用 getTimestamp() 方法来构建日期字符串表示形式所基于的 java.sql.Timestamp 对象 |
DBConnection.java | 创建到数据库和数据库服务器的连接 |
DBDATESelect.java | 显示如何根据 URL 字符串中的 DBDATE 属性值从数据库检索日期对象和日期字符串表示形式 |
DBMetaData.java | 显示如何检索具有 DatabaseMetaData 接口的数据库消息 |
DropDB.java | 删除名为 testDB 的数据库 |
ErrorHandling.java | 显示如何检索 RSAM 错误消息 |
GLDATESelect.java | 显示如何根据 URL 字符串中的 GL_DATE 属性值从数据库检索日期对象和日期字符串表示形式 |
Intervaldemo.java | 显示如何插入和选择 GBase 8s 间隔数据 |
LOCALESelect.java | 显示如何根据 URL 字符串中的 CLIENT_LOCALE 属性值从数据库检索日期对象和日期字符串表示形式 |
locmsg.java | 显示如何使用支持本地化错误消息的 GBase 8s 扩展方法 |
MultiRowCall.java | 显示如何在存储过程调用中返回多个行 |
OptimizedSelect.java | 显示如何使用 FET_BUF_SIZE 环境变量调整 GBase 8s JDBC Driver 元组缓冲区大小 |
optofc.java | 显示如何使用 OPTOFC 环境变量 |
PropertyConnection.java | 显示如果通过属性列表指定连接环境变量 |
RSMetaData.java | 显示如何使用 ResultSetMetaData 接口检索结果集的信息 |
ScrollCursor.java | 显示如何使用滚动游标检索结果集 |
Serial.java | 显示如何插入和检索 GBase 8s SERIal 及 SERIal8 数据 |
SimpleCall.java | 显示如何调用存储过程 |
SimpleConnection.java | 显示如何连接到数据库或数据库服务器 |
SimpleSelect.java | 显示如何将简单的 SELECT 查询发送到数据库服务器 |
TextConv.java | 显示如何将文件从客户端代码集转换为 Unicode ,然后从 Unicode 转换为数据库代码集 |
TextType.java | 显示如何插入和选择包含 TEXT 数据类型的列的表 |
UpdateCursor1.java | 显示如何在查询中使用 ROWID 列创建一个可更新的滚动游标 |
UpdateCursor2.java | 显示如何在查询中使用 SERIAL 列创建一个可更新的滚动游标 |
UpdateCursor3.java | 显示如何在查询中使用主键列创建一个可更新的滚动游标 |
clob-blob 目录中的示例
下表列出了 clob-blob 目录中的文件。
示例程序名称 | 描述 |
---|---|
demo1.java | 显示如何创建两个具有 BLOB 和 CLOB 列的表,并比较数据 |
demo2.java | 显示如何创建具有 BYTE 和 TEXT 列的表和另一个具有 BLOB 和 CLOB 列的表,然后比较这两个表的数据 |
demo3.java | 显示如何创建一个具有 BLOB 和 CLOB 列的表,和一个具有 BYTE 和 TEXT 列的表,然后比较这两个表的数据 |
demo4.java | 显示如何创建两个分别具有 BYTE 和 TEXT 列的表,并比较数据 |
demo5.java | 显示如何将文件的数据存储到 BLOB 表列 |
demo6.java | 显示如何读取智能大对象中的部分数据 |
demo_11.java | 显示如何将文件的数据读取到缓冲区并将缓冲区的数据写入智能大对象 |
demo_13.java | 显示如何将数据写入智能大对象,然后将智能大对象插入到表 |
demo_14.java | 显示如何从表访存智能大对象 |
udt-distinct 目录中的示例
下表列出了 udt-distinct 目录中的文件(使用不透明类型的附加示例在 udtudrmgr 目录中的示例中有所描述)。
示例程序名称 | 描述 |
---|---|
charattrUDT.java | 显示如何使用 SQLData 实现不透明固定长度类型 |
createDB.java | 创建一个其它 udt-distinct 演示文件使用的数据库 |
createTypes.java | 显示如何在数据库中创建不透明和 distinct 类型 |
distinct_d1.java | 显示如何不使用 SQLData 而创建 distinct 类型 |
distinct_d2.java | 显示如何不使用 SQLData 创建第二个 distinct 类型 |
dropDB.java | 删除其它 udt-distinct 演示文件使用的数据库 |
largebinUDT.java | 显式如何使用 SQLData 实现不透明类型(启用智能大对象) |
manualUDT.java | 显示如何实现允许更改输入流中的位置的不透明类型 |
myMoney.java | 显式如何使用 SQLData 实现 distinct 类型 |
udt_d1.java | 显示如何创建固定长度不透明类型 |
udt_d2.java | 显示如何使用嵌入式智能大对象创建不透明类型 |
udt_d3.java | 显示如何创建一个允许更改输入流中位置的不透明类型 |
complex-types 目录中的示例
下表列出了 complex-types 目录中的文件。
示例程序名称 | 描述 |
---|---|
createDB.java | 创建具有命名行的数据库 |
list1.java | 使用 java.sql.Array 和 java.util.Collection 类插入和选择简单集合 |
list2.java | 插入和选择具有嵌套行元素的集合 对集合使用 java.sql.Array 和 java.util.Collection 类,对嵌套行使用 SQLData 和 Struct 接口 |
r1_t.java | 为命名行 r1_t 定义 SQLData 类 |
r2_t.java | 为命名行 r2_t 定义 SQLData 类 |
GenericStruct.java | 实例化 java.sql.Struct 对象以插入数据到命名或未命名行 |
row1.java | 使用 SQLData 和 Struct 接口插入和选择一个简单的命名行 |
row2.java | 使用 SQLData 和 Struct 接口插入和选择具有嵌套集合的命名行 SQLData 接口使用 GBase 8s IfmxComplexSQLOutput. writeObject() 和 IfmxComplexSQLOutput.readObject() 扩展方法写入和读取嵌套集合 |
row3.java | 插入并选择具有嵌套集合的未命名行 |
fullname.java | 使命名行 fullname_t 包含 SQLData 类 供 demo1.java 和 demo2.java 文件使用 |
person.java | 使命名行 person_t 包含 SQLData 类 供 demo1.java 和 demo2.java 文件使用 |
demo1.java | 将一个命名行访存到 SQLData 对象 |
demo2.java | 将 SQLData 对象插入到一个命名行列 |
demo3.java | 将一个未命名行列插入到 Struct 对象 |
demo4.java | 将 Struct 对象插入到命名行列 |
demo5.java | 将 GBase 8s SET 列访存到 java.util.HashSet 对象 |
demo6.java | 将 GBase 8s SET 列访存到 java.util.TreeSet 对象 提供自定义类型映射以重写缺省值 |
demo7.java | 将 java.util.HashSet 对象插入到 GBase 8s SET 列 |
demo8.java | 将 GBase 8s SET 列访存到 java.sql.Array 对象 |
dropDB.java | 删除数据库 |
proxy 目录中的示例
下表列出了 proxy 目录中的文件。目录中的 README 文件包含设置信息。
示例程序名称 | 描述 |
---|---|
ProxySelect.java | (应用程序)创建样本数据库并使用四种场景连接到数据库: _ 使用代理服务器而不使用 LDAP 服务器连接 _ 使用 LDAP 服务器而不使用代理服务器连接 _ 使用 sqlhosts 文件连接 _ 直接连接(无代理 servlet、sqlhosts 文件或 LDAP 服务器) |
proxy.sh | (shell 脚本)启动 ProxySelect.java。要运行此脚本(和样本),请输入: proxy.sh -d ProxySelect -s 2 |
proxy.java | (小程序)从应用小程序执行与 ProxySelect.java 相同的操作。要运行此应用小程序,请输入: appletviewer proxy.html |
proxy.html | proxy.java 的 HTML 文件 |
ifmx.conf | LDAP 配置文件示例 |
ifmx.ldif | LDAP ldif 文件示例 |
connection-pool 目录中的示例
下表列出了 connection-pool 目录中的文件。目录中的 README 文件包含设置信息。
示例程序名称 | 描述 |
---|---|
AppSimulator.java | 模拟多客户端线程进行 DataSource 连接 |
SetupDB.java | 创建并填充一个样本数据库。请参阅示例运行命令的代码开头的注释。 |
DS_Pool.prop | 列出连接池应用程序的属性 |
myCPDS.prop | 列出连接池应用程序的属性,包括可选的调整属性 |
DS_no_Pool.prop | 列出应用程序的属性,不包括连接池 |
Register.java | 使用 JNDI Name 注册 DataSource 对象 运行命令的示例为: java Register DS_no_Pool /tmp |
runDemo | (Shell 脚本)创建并填充一个样本数据库;注册数据源 DS_no_Pool 和 DS_Pool;运行应用程序模拟多个客户端线程连接样本数据库 |
xml 目录中的示例
下表列出了 xml 目录中的示例。
示例程序名称 | 描述 |
---|---|
CreateDB.java | 创建一个样本数据库 |
makefile | 编译示例 |
myHandler.java | SAX 解析程序回调例程类示例 |
sample1.xml | 简单的 XML slide |
sample2.xml | XML slide 的样例集 |
sample2.dtd | 定义 sample1.xml 文档类型 |
xmldemo1.java | 使用 XMLtoString(), getInputSource() 和 myHandler.java 将 sample1.xml 中的 XML 转换为一个 InputSource 对象,然后使用 SAX 解析程序解析它。 |
hdr 目录中的示例
下表包含了 hdr 目录中的文件。目录中的 README 文件包含设置信息。
示例程序名称 | 描述 |
---|---|
SetupDB.java | 创建样本数据库和表 |
Register.java | 使用 JNDI Name 注册器注册 DS_no_Pool 和 DS_Pool DataSource 对象。运行命令示例如下: java Register DS_no_Pool /tmp |
AppSimulator.java | 模拟使用 DataSource.getConnection() 方法进行池式和非池式连接的高可用数据复制重定向 |
HdrSimpleConnect.java | 显示如何使用 DriverManager.getConnection() 方法实现 HDR 重定向 |
tools 目录中的示例
tools 目录包括以下子目录:
- udtudrmgr 目录,包括使用 UDT 和 UDR Manager 创建不透明类型和 UDR 的示例。
- classgenerator 目录,包括 ClassGenerator 实用程序的样本输出文件。
udtudrmgr 目录中的示例
下表包含了 udtudrmgr 目录中的文件。目录中的 README 文件包含设置信息。
示例程序名称 | 描述 |
---|---|
createDB.java | 创建样本数据库 |
dropDB.java | 删除样本数据库 |
Circle.java | (示例应用程序 1)使用缺省的 Input 和 Output 函数将 Java™ 类转换为 Java 不透明类型 |
PlayWithCircle.java | (示例应用程序 1)在客户端应用程序中使用 Circle 不透明类型 |
Circle2.java | (示例应用程序 2)使用用户提供的 Input 和 Output 函数将 Java 类转换为 Java 不透明类型 |
PlayWithCircle2.java | (示例应用程序 2)在客户端应用程序中使用 Circle2 不透明类型 |
MyCircle.java | (示例应用程序 3)在不预先存在 Java 类的情况下,创建固定长度不透明类型 |
Group1.java | (示例应用程序 4)将现有 Java 类中的方法映射到 Java UDR |
PlayWithGroup1.java | (示例应用程序 4)在客户端应用程序中使用 Group1.java 的 UDR |
DataSource 扩展
本节列出了标准 JDBC 类的 GBase 8s 扩展:
- IfxDataSource类,实现 DataSource 接口
- IfxConnectionPoolDataSource类,实现 ConnectionPoolDataSource 接口
有关如何以及为何使用 DataSource 或 ConnectionPoolDataSource 对象的信息,请参阅 JDBC 3.0 API。
GBase 8s JDBC Driver 提供以下用途的扩展:
- 读和写属性
- 获取和设置标准属性
- 获取和设置 GBase 8s 连接属性
- 获取和设置 Connection Pool DataSource 属性
读和写属性
以下方法在扩展的DataSource接口中定义,以便读取和写入属性。这些方法允许您通过编辑现有 DataSource 对象的属性列表来定义新的DataSource 对象。
public Properties getDsProperties();
返回包含在 DataSource 对象中的 Property 对象
public void addProp(String key, Object value);
添加属性到属性列表。
key 参数指定要添加的属性。
value 参数是属性的值。
public Object getProp(String key);
从属性列表获取属性的值。
key 参数指定要检索的属性。
public void removeProperty(String key);
从属性列表移除属性。
key 参数指定要移除的属性。
public void readProperties(InputStream in) throws IOException;
将属性从InputStream 对象读取到 DataSource 对象。
in 参数是要读取属性的 InputStream 对象。
当输入流读取时若发生 I/O 错误,则会出现异常。
public void writeProperties(OutputStream out) throws IOException;
将 DataSource 对象的属性写入到 OutputStream 对象。
out 参数是要写入属性的 OutputStream 对象。
当写入到输出流时若发生 I/O 错误,则会出现异常。
获取和设置标准属性
以下方法在扩展的DataSource 接口中定义,以便获取和设置 JDBC 3.0 API 中的属性。
属性 | getXXX() 和 setXXX() 方法签名 |
---|---|
portNumber | public int getPortNumber(); public void setPortNumber(int value); |
databaseName | public String getDatabaseName(); public void setDatabaseName(String value); |
serverName | public String getServerName(); public void setServerName(String value); |
user | public String getUser(); public void setUser(String value); |
password | public String getPassword(); public void setPassword(String value); |
description | public String getDescription(); public void setDescription(String value); |
dataSourceName | public String getDataSourceName(); public void setDataSourceName(Stringvalue); |
GBase 8s JDBC Driver 不支持 networkProtocol 和 roleName 属性。
获取和设置 GBase 8s 连接属性
以下方法在扩展的 DataSource 接口中定义,以便获取和设置 GBase 8s 环境变量值。
环境变量 | getIfxXXX() 和 setIfxXXX() 方法签名 |
---|---|
CLIENT_LOCALE | public String getIfxCLIENT_LOCALE() public void setIfxCLIENT_LOCALE(String value) |
CSM | public String getIfxCSM() public void setIfxCSM(String csm) |
DBANSIWARN | public boolean isIfxDBANSIWARN() public void setIfxDBANSIWARN(boolean value) |
DBCENTURY | public String getIfxDBCENTURY() public void setIfxDBCENTURY(String value) |
DBDATE | public String getIfxDBDATE() public void setIfxDBDATE(String value) |
DB_LOCALE | public String getIfxDB_LOCALE() public void setIfxDB_LOCALE(String value) |
DBSPACETEMP | public String getIfxDBSPACETEMP() public void setIfxDBSPACETEMP(String value) |
DBTEMP | public String getIfxDBTEMP() public void setIfxDBTEMP(String value) |
DBUPSPACE | public String getIfxDBUPSPACE() public void setIfxDBUPSPACE(String value) |
DELIMIDENT | public boolean isIfxDELIMIDENT() public void setIfxDELIMIDENT(boolean value) |
ENABLE_TYPE_CACHE | public boolean isIfxENABLE_TYPE_CACHE() public void setIfxENABLE_TYPE_CACHE(boolean value) |
ENABLE_HDRSWITCH | public booleangetIfxENABLE_HDRSWITCH() public void setIfxENABLE_HDRSWITCH(boolean value) |
FET_BUF_SIZE | public int getIfxFET_BUF_SIZE() public void setIfxFET_BUF_SIZE(int value) |
GL_DATE | public String getIfxGL_DATE() public void setIfxGL_DATE(String value) |
IFX_AUTOFREE | public boolean isIfxIFX_AUTOFREE() public void setIfxIFX_AUTOFREE(boolean value) |
IFX_CODESETLOB | public int getIfxIFX_CODESETLOB() public void setIfxIFX_CODESETLOB(int codesetlobFlag) |
IFX_DIRECTIVES | public String getIfxIFX_DIRECTIVES() public void setIfxIFX_DIRECTIVES(String value) |
IFX_EXTDIRECTIVES | public String getIfxIFX_EXTDIRECTIVES() public void setIfxIFX_EXTDIRECTIVES(String value) |
IFX_FLAT_UCSQ | public int getIfxIFX_FLAT_UCSQ() public void setIfxIFX_FLAT_UCSQ(int value) |
IFX_GET_SMFLOAT_AS_FLOAT | public boolean getIfxIFX_GET_SMFLOAT_AS_FLOAT() public void setIfxIFX_IFX_GET_SMFLOAT_AS_FLOAT(boolean value) |
IFX_ISOLATION_LEVEL | public String getIfxIFX_ISOLATION_LEVEL() public void setIfxIFX_ISOLATION_LEVEL (String iso_level) |
IFX_LOCK_MODE_WAIT | public int getIfxIFX_LOCK_MODE_WAIT() public void setIfxIFX_LOCK_MODE_WAIT(int lock_time) |
IFX_SET_FLOAT_AS_SMFLOAT | public boolean getIfxIFX_SET_FLOAT_AS_SMFLOAT() public void setIfxIFX_SET_FLOAT_AS_SMFLOAT(boolean value) |
IFX_TRIMTRAILINGSPACES | public int getIfxIFX_TRIMTRAILINGSPACES() public void setIfxIFX_TRIMTRAILINGSPACES(int value) |
IFXHOST | public String getIfxIFXHOST() public void setIfxIFXHOST(String value) |
IFXHOST_SECONDARY | public String getIfxIFXHOST_SECONDARY() public void setIfxIFXHOST_SECONDARY(String value) |
IFX_USEPUT | public boolean isIfxIFX_USEPUT() public void setIfxIFX_USEPUT(boolean value) |
IFX_XASPEC | public String getIfxIFX_XASPEC() (returns y or n) public void IfxIFX_XASPEC(String XASPEC_flag) (only y, Y, n, or N are valid) |
IFX_XASTDCOMPLIANCE_XAEND | public int getIfxIFX_XASTDCOMPLIANCE_XAEND() public void setIfxIFX_XASTDCOMPLIANCE_XAEND(int value) |
GBASEDBTCONRETRY | public int getIfxGBASEDBTCONRETRY() public void setIfxGBASEDBTCONRETRY(int value) |
GBASEDBTCONTIME | public int getIfxGBASEDBTCONTIME() public void setIfxGBASEDBTCONTIME(int value) |
GBASEDBTOPCACHE | public String getIfxGBASEDBTOPCACHE() public void setIfxGBASEDBTOPCACHE(String value) |
GBASEDBTSERVER_SECONDARY | public String getIfxGBASEDBTSERVER_SECONDARY() public void setIfxGBASEDBTSERVER_SECONDARY(String value) |
GBASEDBTSTACKSIZE | public int getIfxGBASEDBTSTACKSIZE() public void setIfxGBASEDBTSTACKSIZE(int value) |
JDBCTEMP | public String getIfxJDBCTEMP() public void setIfxJDBCTEMP(String value) |
LDAP_IFXBASE | public String getIfxLDAP_IFXBASE() public void setIfxLDAP_IFXBASE(String value) |
LDAP_PASSWD | public String getIfxLDAP_PASSWD() public void setIfxLDAP_PASSWD(String value) |
LDAP_URL | public String getIfxLDAP_URL() public void setIfxLDAP_URL(String value) |
LDAP_USER | public String getIfxLDAP_USER() public void setIfxLDAP_USER(String value) |
LOBCACHE | public int getIfxLOBCACHE() public void setIfxLOBCACHE(int value) |
NEWCODESET | public String getIfxNEWCODESET() public void setIfxNEWCODESET(String value) |
NEWLOCALE | public String getIfxNEWLOCALE() public void setIfxNEWLOCALE(String value) |
NEWNLSMAP | public String getIfxNEWNLSMAP() public void setIfxNEWNLSMAP(String value) |
NODEFDAC | public String getIfxNODEFDAC() public void setIfxNODEFDAC(String value) |
OPT_GOAL | public String getIfxOPT_GOAL() public void setIfxOPT_GOAL(String value) |
OPTCOMPIND | public String getIfxOPTCOMPIND() public void setIfxOPTCOMPIND(String value) |
OPTOFC | public String getIfxOPTOFC() public void setIfxOPTOFC(String value) |
PATH | public String getIfxPATH() public void setIfxPATH(String value) |
PDQPRIORITY | public String getIfxPDQPRIORITY() public void setIfxPDQPRIORITY(String value) |
PORTNO_SECONDARY | public String getIfxPORTNO_SECONDARY public void setIfxPORTNO_SECONDARY(int value) |
PROXY | public String getIfxPROXY() public void setIfxPROXY(String value) |
PSORT_DBTEMP | public String getIfxPSORT_DBTEMP() public void setIfxPSORT_DBTEMP(String value) |
PSORT_NPROCS | public String getIfxPSORT_NPROCS() public void setIfxPSORT_NPROCS(String value) |
SECURITY | public String getIfxSECURITY() public void setIfxSECURITY(String value) |
SQLH_FILE | public String getIfxSQLH_FILE() public void setIfxSQLH_FILE(String value) |
SQLH_TYPE | public String getIfxSQLH_TYPE() public void setIfxSQLH_TYPE(String value) |
SQLIDEBUG | public String getIfxSQLIDEBUG () public void setIfxSQLIDEBUG (String value) |
STMT_CACHE | public String getIfxSTMT_CACHE() public void setIfxSTMT_CACHE(String value) |
获取和设置连接池 DataSource 属性
编写使用 ConnectionPoolDataSource 对象的代码与编写使用 DataSource 对象的代码相同。附加的调整参数使您或您的数据库管理员使用连接池管理器控制连接池管理的某些方面。这些都在连接池中有完整的描述。下表总结了这些属性。
属性 | getXXX() 和 setXXX() 方法签名 |
---|---|
IFMX_CPM_ENABLE_SWITCH_HDRPOOL | public void setIfxCPMSwitchHDRPool (boolean flag) public int getIfxCPMSwitchHDRPool() |
IFMX_CPM_INIT_POOLSIZE | public void setIfxCPMInitPoolSize (int init) public int getIfxCPMInitPoolSize() |
IFMX_CPM_MAX_CONNECTIONS | public void setIfxCPMMaxConnections (int limit) public int getIfxCPMMaxConnections() |
IFMX_CPM_MIN_POOLSIZE | public void setIfxCPMMinPoolSize (int min) public int getIfxCPMMinPoolSize() |
IFMX_CPM_MAX_POOLSIZE | public void setIfxCPMMaxPoolSize (int max) public int getIfxCPMMaxPoolSize() |
IFMX_CPM_MIN_AGELIMIT | public void setIfxCPMMinAgeLimit (long limit) public long getIfxCPMMinAgeLimit() |
IFMX_CPM_MAX_AGELIMIT | public void setIfxCPMMaxAgeLimit (long limit) public long getIfxCPMMaxAgeLimit() |
IFMX_CPM_SERVICE_INTERVAL | public void setIfxCPMServiceInterval (long interval) public long getIfxCPMServiceInterval() |
映射数据类型
本节描述了在 Java™ 程序中定义的数据类型和 GBase 8s 数据库服务器支持的数据类型之间的映射问题。
在 GBase 8s 和 JDBC 数据类型之间映射的数据类型
由于每个数据库供应商支持的 SQL 数据类型之间存在差异,JDBC API 在类 java.sql.Types 中定义了一组通用 SQL 数据类型。使用这些 JDBC API 数据类型来引用 Java™ 程序中的通用 SQL 数据类型,这些程序使用 JDBC API 连接到 GBase 8s 数据库。
下表显示了每个 JDBC API 数据类型映射的 GBase 8s 数据类型。
JDBC API 数据类型 | GBase 8s 数据类型 |
---|---|
BIGINT | INT8 、BIGINT 、BIGSERIAL |
BINARY | BYTE |
BIT 1 | BOOLEAN |
REF | 不支持 |
CHAR | CHAR(n) |
DATE | DATE |
DECIMAL | DECIMAL |
DOUBLE | FLOAT |
FLOAT | FLOAT2 |
INTEGER | INTEGER |
LONGVARBINARY | BYTE 或 BLOB |
LONGVARCHAR | TEXT 或 CLOB |
NUMERIC | DECIMAL |
NUMERIC | MONEY |
REAL | SMALLFLOAT |
SMALLINT | SMALLINT |
TIME | DATETIME HOUR TO SECOND2 |
TIMESTAMP | DATETIME YEAR TO FRACTION(5)3 |
TINYINT | SMALLINT |
VARBINARY | BYTE |
VARCHAR | VARCHAR(m,r) |
BOOLEAN | BOOLEAN |
SMALLINT | SMALLINT |
1 在 Java 1.4 中,java.sql.Types.BOOLEAN 映射到 BOOLEAN。
2 这个映射是 JDBC 兼容的。通过将 IFX_SET_FLOAT_AS_SMFLOAT 环境变量设置为 1 ,可以将 JDBC FLOAT 数据类型映射到 GBase 8sSMALLFLOAT 数据类型以便向后兼容。
3 GBase 8s DATETIME 类型非常严格,不可互换。有关更多信息,请参阅 字段长度和 DATETIME 数据。
在扩展类型和 Java 和 JDBC 类型之间映射数据类型
下表列出了 GBase 8s 中扩展的数据类型和对应 Java™ 和 JDBC 的类型之间的映射。
JDBC 类型 | Java 对象类型 | GBase 8s 类型 |
---|---|---|
java.sql.Types.LONGVARCHAR | java.sql.String java.io.inputStream | LVARCHAR IfxTypes.IFX_TYPE_LVARCHAR |
java.sql.Types.JAVA_OBJECT | java.sql.SQLData | Opaque 类型 IfxTypes.IFX_TYPE_UDTFIXED IfxTypes.IFX_TYPE_UDTVAR |
java.sql.Types.LONGVARBINARY java.sql.Types.BLOB | java.sql.Blob java.io.inputStreambyte[] | BLOB IfxTypes.IFX_TYPE_BLOB |
java.sql.Types.LONGVARCHAR java.sql.Types.CLOB | java.sql.Clob java.io.inputStream java.lang.String | CLOB IfxTypes.IFX_TYPE_CLOB |
java.sql.Types.LONGVARBINARY java.sql.Types.BLOB | java.io.inputStream java.sql.Blob byte[] | BYTE IfxTypes.IFX_TYPE_BYTE |
java.sql.Types.LONGVARCHAR java.sql.Types.CLOB | java.io.InputStream java.sql.Clob java.sql.String | TEXT IfxTypes.IFX_TYPE_TEXT |
java.sql.Types.JAVA_OBJECT java.sql.Types.STRUCT | java.sql.SQLData java.sql.Struct | 命名行 IfxTypes.IFX_TYPE_ROW |
java.sql.Types.STRUCT | java.sql.Struct | 未命名行 IfxTypes.IFX_TYPE_ROW |
java.sql.Types.ARRAY java.sql.Types.OTHER | java.sql.Array java.util.LinkedList java.util.HashSet java.util.TreeSet | set, multiset IfxTypes.IFX_TYPE_SET IfxTypes.IFX_TYPE_MULTISET |
java.sql.Types.ARRAY java.sql.Types.OTHER | java.sql.Array java.util.ArrayList java.util.LinkedList | LIST IfxTypes.IFX_TYPE_LIST |
Java boolean 对象可以映射到 GBase 8s smallint 数据类型或 GBase 8s boolean 数据类型。GBase 8s JDBC Driver 尝试根据列类型映射它。但是,在例如 PreparedStatement 主机变量的情况中,GBase 8s JDBC Driver 不会存取列类型,因此,映射在一定程度上是受限制的。有关数据类型映射的详细信息,请参阅PreparedStatement.setXXX() 扩展的数据类型映射。
C 不透明类型和 Java 之间的数据类型映射
要使用 Java™ 创建不透明类型,您可以使用 UDT 和 UDR Manager 工具。有关更多信息,请参阅 与不透明数据类型一起使用。
所有的不透明类型都存储在 C 结构的数据库服务器表中,该结构由不透明类型中定义的各种 DataBlade API 类型组成。(有关更多信息,请参阅《GBase 8s DataBlade API 程序员指南》。)
下表列出了 DataBlade API 类型与相应的 Java 类型的映射。
DataBlade API 类型 | Java 类型 |
---|---|
MI_LO_HANDLE | BLOB 或 CLOB |
gl_wchar_t | String |
mi_boolean | boolean |
mi_char | String |
mi_char1 | String |
mi_date | Date |
mi_datetime | TimeStamp |
mi_decimal | BigDecimal |
mi_double_precision | double |
mi_int1 | byte |
mi_int8 | long |
mi_integer | int |
mi_interval | 不支持 |
mi_money | BigDecimal |
mi_numeric | BigDecimal |
mi_real | float |
mi_smallint | short |
mi_string | String |
mi_unsigned_char1 | String |
mi_unsigned_int8 | long |
mi_unsigned_integer | int |
mi_unsigned_smallint | short |
mi_wchar | String |
C 结构可能包含填充字节。GBase 8s JDBC Driver 会自动跳过这些填充字节,以确保下一个数据成员正确对齐。因此,您的 Java™ 对象不必关心自身的对齐。
PreparedStatement.setXXX() 扩展的数据类型映射
GBase 8s 介绍许多扩展数据类型。因此在 JDBC 或 Java™ 数据类型和 GBase 8s 数据类型之间会有多个映射。
例如,可以使用 PreparedStatement.setAsciiStream() 插入 TEXT 列或 CLOB 列。同样,还可以使用 PreparedStatement.setBinaryStream() 插入到 BYTE 列或 BLOB 列。由于实际的列信息始终对 GBase 8s JDBC Driver 不可用,因此驱动程序在映射数据类型时可能会产生歧义。
通常,在 INSERT 、SELECT 或 DELETE 语句中,列信息对驱动程序是可用的,因此驱动程序可以确定如何将数据发送到数据库服务器。
但是,当在 UPDATE 语句或 WHERE 子句中引用数据时,GBase 8s JDBC Driver 不能访问列信息。在这些情况下,除非您使用 GBase 8s 扩展,否则驱动程序使用在 GBase 8s 和 JDBC 数据类型之间映射的数据类型中第一个表列出的相应的 GBase 8s 数据类型映射这些列。对于PreparedStatement.setAsciiStream() 方法,该驱动程序尝试映射到 TEXT 数据类型,对于 PreparedStatement.setBinaryStream() 方法,它尝试映射到 BYTE 数据类型。
映射扩展
要指示驱动程序映射到某个特定的数据类型(因此 UPDATE 语句和 WHERE 子句中没有歧义),您可使用扩展 PreparedStatement.setXXX() 方法。可能具有歧义的数据类型只有 boolean 、lvarchar 、text 、byte 、BLOB 和 CLOB。
要使用这些扩展方法,您必须将PreparedStatement引用转换为 IfmxPreparedStatement。例如,以下代码将语句变量 p_stmt 转换为IfmxPreparedStatement ,以调用 IfxSetObject() 方法,并将文件的内容作为 CLOB 类型的大对象插入。IfxSetObject() 定义为 I:
public void IfxSetObject(int i, Object x, int scale, int ifxType)
throws SQLException
public void IfxSetObject(int i, Object x, int ifxType) throws
SQLexception
代码为:
File file = new File("sblob_06.dat");
int fileLength = (int)file.length();
byte[] buffer = new byte[fileLength];
FileInputStream fin = new FileInputStream(file);
fin.read(buffer,0,fileLength);
String str = new String(buffer);
writeOutputFile("Prepare");
PreparedStatement p_stmt = myConn.prepareStatement
("insert into sblob_t20(c1) values(?)");
writeOutputFile("IfxSetObject");
((IfmxPreparedStatement)p_stmt).IfxSetObject(1,str,30,IfxTypes.IFX _TYPE_CLOB);
对于IfmxPreparedStatement.IfxSetObject 扩展,不能简单地使用添加的 ifxType 参数重载方法签名。相反,您必须将该方法命名为IfxSetObject。
不透明类型的扩展
处理不透明类型的扩展允许您的应用程序指定数据库服务器在将其返回给客户端之前将其转换为不透明类型的返回类型。这被称为预先绑定返回值。方法是:
- setBindColType(),它允许应用程序使用 java.sql.Types 的标准 JDBC 数据类型指定结果集值的输出类型。
- setBindColIfxType(),允许应用程序使用来自 com.gbasedbt.lang.IfxTypes 的 GBase 8s 数据类型指定结果集的输出类型
有关变量类型的更多信息,请参阅IfxTypes 类。
- clearBindColType(),它重置通过前两个方法设置的值
在以下主题中:
- colIndex 参数指定列:1 是第一列,2 是第二列,依此类推。
- sqltype 参数是来自 java.sql.Types 的值:例如,Types.INTEGER。
- ifxtype 参数是来自 IfxTypes 的值:例如,IfxTypes.IFX_TYPE_DECIMAL。
setBindColType() 方法
方法如下所示:
public void setBindColType(int colIndex, int sqltype) throws SQLException;
public void setBindColType(int colIndex, int sqltype, int scale)
throws SQLException;
public void setBindColType(int colIndex, int sqltype, String name)
throws SQLException;
第一个重载方法允许应用程序指定不透明类型为 java.sql.DECIMAL 或 java.sql.NUMERIC;scale 参数指定小数点右边的位数。第二个重载方法允许应用程序通过将这些值分配给 name 参数,来指定不透明类型为 java.sql.STRUCT 、java.sql.ARRAY 、java.sql.DISTINCT 或java.sql.JAVA_OBJECT。
setBindColIfxType() 方法
方法如下所示:
public void setBindColIfxType(int colIndex, int ifxtype) throws SQLException;
public void setBindColIfxType(int colIndex, int ifxtype, int scale)
throws SQLException;
public void setBindColIfxType(int colIndex, int ifxtype, String name)
throws SQLException ;
第一个重载方法允许应用程序指定输出类型为 IFX_TYPE_DECIMAL 或 IFX_TYPE_NUMERIC;scale 参数指定小数点右边的位数。第二个重载方法允许应用程序通过将其中之一的值分配给 name 参数来指定输出类型为 IFX_TYPE_LIST 、IFX_TYPE_ROW 、IFX_TYPE_MULTISET 、IFX_TYPE_SET、IFX_TYPE_UDTVAR 或 IFX_TYPE_UDTFIXED。
clearBindColType() 方法
方法如下所示:
public void clearBindColType() throws SQLException;
Prebinding 示例
以下示例代码来自 udt_bindCol.java 样本程序,它预先将不透明类型绑定到 GBase 8s VARCHAR ,然后绑定到标准的 Java™ Integer 类型。此示例中使用的表具有一个 int 列和一个不透明类型列,如下所示:
create table charattr_tab (int_col int, charattr_col charattr_udt)
在 charattr_col 列中选择和预绑定不透明类型的代码如下所示:
String s = "select int_col, charattr_col as cast_udt_to_lvc, " +
"charattr_col as cast_udt_to_int from charattr_tab order by 1";
pstmt = conn.prepareStatement(s);
((IfxPreparedStatement)pstmt).setBindColIfxType(2,IfxTypes.IFX_TYPE_LVARCHAR);
((IfxPreparedStatement)pstmt).setBindColType(3,Types.INTEGER);
ResultSet rs = pstmt.executeQuery();
System.out.println("Fetching data ...");
int curRow = 0;
while (rs.next())
{
curRow++;
int intret = rs.getInt("int_col");
String strret = rs.getString("cast_udt_to_lvc");
int intret2 = rs.getInt("cast_udt_to_int");
} // end while
其它映射扩展
以下将列出剩余的方法与其应用条件。在每种情况中,GBase 8s 类型必须是标准 JDBC PreparedStatement.setXXX() 接口的最后一个参数。
IfmxPreparedStatement.setArray()
public void setArray(int parameterIndex, Array x, int ifxType) throws SQLException
IfmxPreparedStatement.setAsciiStream()
public void setAsciiStream(int i, InputStream x, int length, int ifxType) throws SQLException
当应用程序将一个很大的 ASCII 值插入到 LONGVARCHAR 列中时,使用 java.io.InputStream 会更高效地将 ASCII 值发送到服务器。
IfmxPreparedStatement.setBigDecimal()
public void setBigDecimal(int i, BigDecimal x, int ifxType) throws SQLException
IfmxPreparedStatement.setBinaryStream()
public void setBinaryStream(int i, InputStream x, int length, int ifxType) throws SQLException
当应用程序插入一个很大的二进制值到 LONGVARbinary 列时,使用 java.io.InputStream 将会更高效地将二进制值发送到服务器。
IfmxPreparedStatement.setBlob()
public void setBlob(int parameterIndex, Blob x, int ifxType) throws SQLException
IfmxPreparedStatement.setBoolean()
public void setBoolean(int i, boolean x, int ifxType) throws SQLException
IfmxPreparedStatement.setByte()
public void setByte(int i, byte x, int ifxType) throws SQLException
IfmxPreparedStatement.setBytes()
public void setBytes(int i, byte x[], int ifxType) throws SQLException
IfmxPreparedStatement.setCharacterStream()
public void setCharacterStream(int parameterIndex, Reader reader, int length, int ifxType) throws SQLException
当应用程序将 LONGVARCHAR 参数设置为一个很大的 UNICODE 值时,使用 java.io.Reader 会更高效率地将 UNICODE 值发送到服务器。
IfmxPreparedStatement.setClob()
public void setClob(int parameterIndex, Clob x, int ifxType) throws SQLException
IfmxPreparedStatement.setDate()
public void setDate(int i, Date x, int ifxType) throws SQLException
public void setDate(int parameterIndex, Date x, Calendar Cal, int ifxType) throws SQLException
IfmxPreparedStatement.setDouble()
public void setDouble(int i, double x, int ifxType) throws SQLException
IfmxPreparedStatement.setFloat()
public void setFloat(int i, float x, int ifxType) throws SQLException
IfmxPreparedStatement.setInt()
public void setInt(int i, int x, int ifxType) throws SQLException
IfmxPreparedStatement.setLong()
public void setLong(int i, long x, int ifxType) throws SQLException
IfmxPreparedStatement.setNull()
public void setNull(int i, int sqlType, int ifxType) throws SQLException
IfmxPreparedStatement.setShort()
public void setShort(int i, short x, int ifxType) throws SQLException
IfmxPreparedStatement.setString()
public void setString(int i, String x, int ifxType) throws SQLException
IfmxPreparedStatement.setTime()
public void setTime(int i, Time x, int ifxType) throws SQLException
public void setTime(int parameterIndex, Time time, Calendar Cal,int ifxType) throws SQLException
IfmxPreparedStatement.setTimestamp()
public void setTimestamp(int i, Timestamp x, int ifxType) throws SQLException
public void setTimestamp(int parameterIndex, Timestamp x, Calendar Cal) throws SQLException
IfxTypes 类
扩展的 IfmxPreparedStatement 方法要求您传入要映射到其中的 GBase 8s 数据类型。这些类型是 com.gbasedbt.lang.IfxTypes 类的一部分。
下表显示了 IfxTypes 常量和对应的 GBase 8s 数据类型。
IfxTypes 常量 | GBase 8s 数据类型 |
---|---|
IfxTypes.IFX_TYPE_BIGINT | BIGINT |
IfxTypes.IFX_TYPE_BIGSERIAL | BIGSERIAL |
IfxTypes.IFX_TYPE_CHAR | CHAR |
IfxTypes.IFX_TYPE_SMALLINT | SMALLINT |
IfxTypes.IFX_TYPE_INT | INT |
IfxTypes.IFX_TYPE_FLOAT | FLOAT |
IfxTypes.IFX_TYPE_SMFLOAT | SMALLFLOAT |
IfxTypes.IFX_TYPE_DECIMAL | DECIMAL |
IfxTypes.IFX_TYPE_SERIAL | SERIAL |
IfxTypes.IFX_TYPE_DATE | DATE |
IfxTypes.IFX_TYPE_MONEY | MONEY |
IfxTypes.IFX_TYPE_NULL | NULL |
IfxTypes.IFX_TYPE_DATETIME | DATETIME |
IfxTypes.IFX_TYPE_BYTE | BYTE |
IfxTypes.IFX_TYPE_TEXT | TEXT |
IfxTypes.IFX_TYPE_VARCHAR | VARCHAR |
IfxTypes.IFX_TYPE_INTERVAL | INTERVAL |
IfxTypes.IFX_TYPE_NCHAR | NCHAR |
IfxTypes.IFX_TYPE_NVARCHAR | NVARCHAR |
IfxTypes.IFX_TYPE_INT8 | INT8 |
IfxTypes.IFX_TYPE_SERIAL8 | SERIAL8 |
IfxTypes.IFX_TYPE_SET | SQLSET |
IfxTypes.IFX_TYPE_MULTISET | SQLMULTISET |
IfxTypes.IFX_TYPE_LIST | SQLLIST |
IfxTypes.IFX_TYPE_ROW | SQLROW |
IfxTypes.IFX_TYPE_COLLECTION | COLLECTION |
IfxTypes.IFX_TYPE_UDTVAR | UDTVAR |
IfxTypes.IFX_TYPE_UDTFIXED | UDTFIXED |
IfxTypes.IFX_TYPE_REFSER8 | REFSER8 |
IfxTypes.IFX_TYPE_LVARCHAR | LVARCHAR |
IfxTypes.IFX_TYPE_SENDRECV | SENDRECV |
IfxTypes.IFX_TYPE_BOOL | BOOLEAN |
IfxTypes.IFX_TYPE_IMPEXP | IMPEXP |
IfxTypes.IFX_TYPE_IMPEXPBIN | IMPEXPBIN |
IfxTypes.IFX_TYPE_CLOB | CLOB |
IfxTypes.IFX_TYPE_BLOB | BLOB |
扩展总结
本节中的表列出了 GBase 8s JDBC Driver 支持的非扩展数据类型和 GBase 8s 扩展数据类型的 PreparedStatement.setXXX() 方法。
非扩展数据类型
下表列出了 GBase 8s JDBC Driver 支持的非扩展数据类型的 PreparedStatement.setXXX() 方法。首先列出了 java.sql.Types 类中定义的标准 JDBC API 数据类型。它们会转换为特定的 GBase 8s 数据类型,如在扩展类型和 Java 和 JDBC 类型之间映射数据类型中的表所示。下一个表列出了可用于写入特定 JDBC API 数据类型的数据的 setXXX() 方法。大写和粗体 X 表示推荐与 GBase 8s JDBC Driver 一起使用的 setXXX() 方法;小写x 表示 GBase 8s JDBC Driver 支持的其它方法。
数值型 JDBC API 数据类型
表 1. 来自 java.sql.Types 的数值型 JDBC API 数据类型
setXXX() 方法 | TINYINT | SMALLINT | INTEGER | BIGINT |
---|---|---|---|---|
setByte() | X | x | x | x |
setShort() | x | X | x | x |
setInt() | x | x | X | x |
setLong() | x | x | x | X |
setFloat() | x | x | x | x |
setDouble() | x | x | x | x |
setBigDecimal() | x | x | x | x |
setBoolean() | x | x | x | x |
setString() | x | x | x | x |
setObject() | x | x | x | x |
表 2. 来自 java.sql.Types 的数值型 JDBC API 数据类型(续)
setXXX() 方法 | REAL | FLOAT | DOUBLE | DECIMAL | NUMERIC |
---|---|---|---|---|---|
setByte() | x | x | x | x | x |
setShort() | x | x | x | x | x |
setInt() | x | x | x | x | x |
setLong() | x | x | x | x | x |
setFloat() | X | x | x | x | x |
setDouble() | x | X | X | x | x |
setBigDecimal() | x | x | x | X | X |
setBoolean() | x | x | x | x | x |
setString() | x | x | x | x | x |
setObject() | x | x | x | x | x |
字符型和时间型 JDBC API 数据类型
表 3. 来自 java.sql.Types 的字符型和时间型 JDBC API 数据类型
setXXX() 方法 | CHAR | VARCHAR | LONGVARCHAR | BINARY |
---|---|---|---|---|
setByte() | x | x | ||
setShort() | x | x | ||
setInt() | x | x | ||
setLong() | x | x | ||
setFloat() | x | x | ||
setDouble() | x | x | ||
setBigDecimal() | x | x | ||
setBoolean() | x | x | ||
setString() | X | X | x | x |
setBytes() | x | X | ||
setDate() | x | x | ||
setTime() | x | x | ||
setTimestamp() | x | x | ||
setAsciiStream() | X | x | ||
setCharacterStream() | X | x | ||
setBinaryStream() | x | x | ||
setObject() | x | x | x | x |
- 列值必须精确符合 setXXX() 的类型,否则发出 SQLException 。如果列值不在允许的范围内,则 setXXX() 方法发出异常并不会转换数据。例如,如果正在写入的值是1000,则 setByte(1) 会引发 SQLException。
- 写入一个字节数组。
表 4. 来自 java.sql.Types 的字符型和时间型 JDBC API 数据类型(续)
setXXX() 方法 | VARBINARY | LONGVARBINARY | DATE | TIME | TIMESTAMP |
---|---|---|---|---|---|
setString() | x | x | x | x | x |
setBytes() | X | x | |||
setDate() | X | x | |||
setTime() | X | x | |||
setTimestamp() | x | X | |||
setAsciiStream() | x | x | |||
setCharacterStream() | x | x | |||
setBinaryStream() | x | X | |||
setObject() | x | x | x | x | x |
- 写入字节数组。
- 写入 Timestamp 对象而不是 Time 对象。
setMaxRows() 方法写入 SQL 空值。
GBase 8s 扩展数据类型
下表列出了 GBase 8s JDBC Driver 支持的 GBase 8s 扩展数据类型的 PreparedStatement.setXXX() 方法,其之间的映射在表在扩展类型和 Java 和 JDBC 类型之间映射数据类型中展示。该表列出了您可以用于写入的特定扩展数据类型的数据的 setXXX() 方法。
大写并加粗的 X 表示推荐使用的 setXXX() 方法;小写的 x 表示 GBase 8s JDBC Driver 支持的其它 setXXX() 方法。该表不包含您不能使用的GBase 8s 扩展数据类型的 setXXX() 方法。
表 1. GBase 8s 扩展数据类型
setXXX() 方法 | BOOLEAN | LVARCHAR | Opaque 类型 | BLOB | CLOB | BYTE | TEXT |
---|---|---|---|---|---|---|---|
setByte() | x | x | |||||
setShort() | x | ||||||
setInt() | x | ||||||
setBoolean() | X | ||||||
setString() | X | x | x | ||||
setBytes() | x | x | |||||
setAsciiStream() | x | x | X | ||||
setCharacterStream() | x | x | X | ||||
setBinaryStream() | x | x | X | ||||
setObject() | x | x | X | x | x | x | x |
setArray() | |||||||
setBlob() | X | ||||||
setClob() | X |
表 2. GBase 8s 扩展数据类型(续)
setXXX() 方法 | NAMED ROW | UNNAMED ROW | SET 或 MULTISET | LIST |
---|---|---|---|---|
setObject() | X | X | x | x |
setArray() | x | x |
setMaxRows() 方法写入一个 SQL 空值。
ResultSet.getXXX() 方法的数据类型映射
使用 ResultSet.getXXX() 方法将数据从使用 JDBC API 连接的 GBase 8s 数据库传输到 Java™ 程序。例如,使用 ResultSet.getString() 方法获取 LVARCHAR 数据类型列中存储的信息。
如果您在 SQL 语句中使用表达式(例如,SELECT mytype::LVARCHAR FROM mytab),您可能不能使用 ResultSet.getXXX(columnName) 检索值。请改为使用ResultSet.getXXX(columnIndex) 来检索该值。
如果检索的列值是 SQL 空值,则 getXXX() 方法返回空值。
本节中的表列出了 GBase 8s JDBC Driver 支持的非扩展数据类型和 GBase 8s 扩展数据类型的 ResultSet.getXXX() 方法。
非扩展数据类型
下表列出了 GBase 8s JDBC Driver 支持的非扩展数据类型的 ResultSet.getXXX() 方法。首先列出了 java.sql.Types 类中定义的标准 JDBC API 数据类型。它们会转换为特定的 GBase 8s 数据类型,如在扩展类型和 Java 和 JDBC 类型之间映射数据类型中的表所示。该表列出了可用于检索特定的 JDBC API 数据类型的数据的 getXXX() 方法。
大写和粗体 X 表示推荐与 GBase 8s JDBC Driver 一起使用的 getXXX() 方法;小写 x 表示 GBase 8s JDBC Driver 支持的其它 getXXX() 方法。
数值型 JDBC API 数据类型
表 1. 来自 java.sql.Types 的数值型 JDBC API 数据类型
getXXX() 方法 | TINYINT | SMALLINT | INTEGER | BIGINT |
---|---|---|---|---|
getByte() | X | x | x | x |
getShort() | x | X | x | x |
getInt() | x | x | X | x |
getLong() | x | x | x | X |
getFloat() | x | x | x | x |
getDouble() | x | x | x | x |
getBigDecimal() | x | x | x | x |
getBoolean() | x | x | x | x |
getString() | x | x | x | x |
getObject() | x | x | x | x |
表 2. 数值型 JDBC API 数据类型 (续)
getXXX() 方法 | REAL | FLOAT | DOUBLE | DECIMAL | NUMERIC |
---|---|---|---|---|---|
getByte() | x | x | x | x | x |
getShort() | x | x | x | x | x |
getInt() | x | x | x | x | x |
getLong() | x | x | x | x | x |
getFloat() | X | x | x | x | x |
getDouble() | x | X | X | x | x |
getBigDecimal() | x | x | x | X | X |
getBoolean() | x | x | x | x | x |
getString() | x | x | x | x | x |
getObject() | x | x | x | x | x |
字符型和时间型 JDBC API 数据类型
表 3. 来自 java.sql.Types 的字符型和时间型 JDBC API 数据类型
getXXX() 方法 | CHAR | VARCHAR | LONGVARCHAR | BINARY |
---|---|---|---|---|
getByte() | x | x | ||
getShort() | x | x | ||
getInt() | x | x | ||
getLong() | x | x | ||
getFloat() | x | x | ||
getDouble() | x | x | ||
getBigDecimal() | x | x | ||
getBoolean() | x | x | ||
getString() | X | X | x | x |
getBytes() | x | X | ||
getDate() | x | x | ||
getTime() | x | x | ||
getTimestamp() | x | x | ||
getAsciiStream() | X | x | ||
getCharacterStream() | X | x | ||
getBinaryStream() | x | x | ||
getObject() | x | x | x | x |
- 列值必须精确符合 getXXX() 类型,否则会发出 SQLException。如果列值不在允许的范围内,则 setXXX() 方法发出异常并不会转换数据。例如,如果列值是 1000,则 getByte(1) 会引发 SQLException。
- 返回一个字节数组。
表 4. 来自 java.sql.Types 的字符型和时间型 JDBC API 数据类型(续)
getXXX() 方法 | VARBINARY | LONGVARBINARY | DATE | TIME | TIMESTAMP |
---|---|---|---|---|---|
getString() | x | x | x | x | x |
getBytes() | X | x | |||
getDate() | X | x | |||
getTime() | X | x | |||
getTimestamp() | x | X | |||
getAsciiStream() | x | x | |||
getCharacterStream() | x | x | |||
getBinaryStream() | x | X | |||
getObject() | x | x | x | x | x |
- 返回一个字节数组。
- 返回一个 Timestamp 对象而不是 Time 对象。
GBase 8s 扩展数据类型
下表列出了 GBase 8s JDBC Driver 支持的 GBase 8s 扩展数据类型的 PreparedStatement.getXXX() 方法,其之间的映射在表在扩展类型和 Java 和 JDBC 类型之间映射数据类型中展示。该表列出了您可以用于检索的特定扩展数据类型的数据的 getXXX() 方法。
大写并加粗的 X 表示推荐使用的 getXXX() 方法;小写的 x 表示 GBase 8s JDBC Driver 支持的其它 getXXX() 方法。该表不包含您不能使用的GBase 8s 扩展数据类型的 getXXX() 方法。
表 1. GBase 8s 扩展数据类型
getXXX() 方法 | BOOLEAN | LVARCHAR | Opaque 类型 | BLOB | CLOB | BYTE |
---|---|---|---|---|---|---|
getByte() | x | x | ||||
getShort() | x | |||||
getInt() | x | |||||
getBoolean() | X | |||||
getString() | X | x | ||||
getBytes() | x | x | ||||
getAsciiStream() | x | x | ||||
getCharacterStream() | x | x | ||||
getBinaryStream() | x | x | X | |||
getObject() | x | x | X | x | x | x |
getBlob() | X | |||||
getClob() | X |
表 2. GBase 8s 扩展的数据类型(续)
getXXX() 方法 | TEXT | NAMED ROW | UNNAMED ROW | SET 或 MULTISET | LIST |
---|---|---|---|---|---|
getString() | x | ||||
getBytes() | |||||
getAsciiStream() | X | ||||
getCharacterStream() | X | ||||
getBinaryStream() | |||||
getObject() | x | X | X | x | x |
getArray() | x | x | |||
getBlob() | |||||
getClob() |
UDT manager 和 UDR manager 的数据类型映射
当使用 UDTManager 和 UDRManager 类在数据库中创建不透明类型和 Java™ UDR 时,驱动程序映射 Java 方法参数并根据本节中的表返回类型的 SQL数据类型。不支持未在这些表中显示的任何数据类型。
如果 Java™ 方法具有以下任何 Java 类型的参数,则参数和返回类型将映射到服务器中的 SQL 类型,如下表所示。该表显示每个 Java 数据类型映射到的 GBase 8s 数据类型。
Java 数据类型 | SQL 数据类型 |
---|---|
boolean, java.lang.Boolean | BOOLEAN |
char | CHAR(1) |
byte | CHAR(1) |
short, java.lang.Short | SMALLINT |
int, java.lang.Integer | INT |
long, java.lang.Long | INT8 |
float, java.lang.Float | SMALLFLOAT |
double, java.lang.Double | FLOAT1 |
java.lang.String | LVARCHAR |
java.math.BigDecimal | DECIMAL 缺省精度由服务器设置:ANSI 数据库为 DECIMAL(16,0) ;非 ANSI 数据库为 decimal (16,255) |
java.sql.Date | DATE |
java.sql.Time | DATETIME HOUR TO SECOND |
java.sql.Timestamp | DATETIME YEAR TO FRACTION(5) |
com.gbasedbt.lang.IntervalYM | INTERVAL YEAR TO MONTH |
com.gbasedbt.lang.IntervalDF | INTERVAL DAY TO FRACTION(5) |
java.sql.Blob | BLOB |
java.sql.Clob | CLOB |
1 此映射是 JDBC 兼容的。通过将 IFX_GET_SMFLOAT_AS_FLOAT 环境变量设置为 1,可以将 Java double 数据类型(通过 JDBC FLOAT 数据类型)映射到 GBase 8s SMALLFLOAT 数据类型以实现向后兼容。
映射转换类型
下表显示了在 UDTMetaData.setXXXCast() 方法中为 ifxtype 参数定义的类型与服务器中的 SQL 数据类型之间支持的映射。
来自 com.gbasedbt.lang.IfxTypes 的 ifxtype 参数类型 | GBase 8s 数据类型 |
---|---|
IFX_TYPE_CHAR | CHAR |
IFX_TYPE_SMALLINT | SMALLINT |
IFX_TYPE_INT | INT |
IFX_TYPE_FLOAT | FLOAT |
IFX_TYPE_SMFLOAT | SMALLFLOAT |
IFX_TYPE_DECIMAL | DECIMAL |
IFX_TYPE_SERIAL | SERIAL |
IFX_TYPE_DATE | DATE |
IFX_TYPE_MONEY | MONEY |
IFX_TYPE_DATETIME | DATETIME |
IFX_TYPE_BYTE | BYTE |
IFX_TYPE_TEXT | TEXT |
IFX_TYPE_VARCHAR | VARCHAR |
IFX_TYPE_INTERVAL | INTERVAL |
IFX_TYPE_NCHAR | NCHAR |
IFX_TYPE_NVARCHAR | NVARCHAR |
IFX_TYPE_INT8 | INT8 |
IFX_TYPE_SERIAL8 | SERIAL8 |
IFX_TYPE_LVARCHAR | LVARCHAR |
IFX_TYPE_SENDRECV | SENDRECV |
IFX_TYPE_BOOL | BOOLEAN |
IFX_TYPE_IMPEXP | IMPEXP |
IFX_TYPE_IMPEXPBIN | IMPEXPBIN |
IFX_TYPE_CLOB | CLOB |
IFX_TYPE_BLOB | BLOB |
映射字段类型
下表显示了在 UDTMetaData.setFieldType() 方法中为 ifxtype 参数定义的类型与在 Java™ 类文件中出现的 Java 数据类型之间支持的映射。未在此表中显示的数据类型在不透明类型中不支持。
来自 com.gbasedbt.lang.IfxTypes 的ifxtype 参数类型 | Java 数据类型 |
---|---|
IFX_TYPE_BIGINT | long |
IFX_TYPE_BIGSERIAL | long |
IFX_TYPE_CHAR | java.lang.String |
IFX_TYPE_SMALLINT | short |
IFX_TYPE_INT | int |
IFX_TYPE_FLOAT | double |
IFX_TYPE_SMFLOAT | float1 |
IFX_TYPE_DECIMAL | java.lang.BigDecimal |
IFX_TYPE_SERIAL | int |
IFX_TYPE_DATE | Date |
IFX_TYPE_MONEY | java.lang.BigDecimal |
IFX_TYPE_DATETIME | 如果起始限定符为年、月或日,则为 java.lang.Timestamp ;否则为 java.lang.Time (请参阅 字段长度和 DATETIME 数据)。 |
IFX_TYPE_INTERVAL | 如果起始限定符为年、月或日,则为 com.gbasedbt.lang.IfxIntervalYM;否则为 com.gbasedbt.lang.IfxIntervalDF (请参阅 字段长度和 DATETIME 数据)。 |
IFX_TYPE_NCHAR | java.lang.String |
IFX_TYPE_INT8 | long |
IFX_TYPE_SERIAL8 | long |
IFX_TYPE_BOOL | boolean |
IFX_TYPE_CLOB | java.sql.Clob |
IFX_TYPE_BLOB | java.sql.Blob |
1 此映射是 JDBC 兼容的。通过将 IFX_GET_SMFLOAT_AS_FLOAT 环境变量设置为 1,将 IFX_TYPE_SMFLOAT 数据类型(通过 JDBC FLOAT 数据类型)映射到 Java double 数据类型以实现向后兼容。
字段长度和 DATETIME 数据
当通过调用 setFieldType(IFX_TYPE_DATETIME) 或 setFieldType(IFX_TYPE_INTERVAL) 将字段类型设置为 date-time 或 interval 数据类型时,驱动程序会将 date-time 字段映射为 java.sql.Timestamp 或 java.sql.Time,这取决于调用 setFieldLength() 时设置的编码长度。
例如,给出一个 date-time 字段的标准格式为 YYYY-MM-DD HH:MM:SS,驱动程序会使用以下映射算法:
- 如果编码长度具有 hour 或更小的起始码,则会映射为 java.sql.Time。
- 如果编码长度具有 year 或更小的起始码,则会映射为 java.sql.TimeStamp。
对于 interval,标准为 YYYY-MM 或 DD HH:MM:SS.frac。其映射如下:
- 如果编码长度具有 day 或更小的起始码,则它映射为 com.gbasedbt.jdbc.IfxIntervalDF。
- 如果编码长度具有 year 或更小的起始码,则它映射为 com.gbasedbt.jdbc.IfxIntervalYM。
转换内部 GBase 8s 数据类型
要使 Java™ 应用程序可以与 GBase 8s 数据类型的内部服务器表示法一起使用,请使用 IfxToJavaType 类。例如,如果应用程序正在使用GBase 8s Change Data Capture API,则可以使用 IfxToJavaType 类解释字节流。
IfxToJavaType 类
IfxToJavaType 类处理所有 GBase 8s 到 Java™ 数据类型的转换。为转换每个 GBase 8s 数据类型都提供了一个方法。
Java 的基本数据类型为 boolean 、char 、byte 、short 、int 、long 、float 、double。如果可能,转换返回基本数据类型而不是 Object。
下表显示了可以在 GBase 8s 数据类型与 Java 数据类型之间进行转换的数据类型。
表 1. GBase 8s 和 Java 数据类型之间的转换
GBase 8s 数据类型 | Java 数据类型 |
---|---|
BIGINT | long |
BYTE | int (作为大对象 ID ,没有输入流) |
CHAR (n) / CHARACTER (n) | string |
DATE | java.sql.Date |
DATETIME | java.sql.Timestamp |
DATETIME | interval |
DATETIME | string |
DEC/DECIMAL (p,s) | java.lang.Bignum |
DOUBLE PRECISION (n) | double |
FLOAT | 与 DOUBLE PRECISION 相同 |
INT8 | long |
INT/INTEGER | int |
INTERVAL | interval |
MONEY (p,s) | 与 DECIMAL 相同 |
NUMERIC (p,s) | 与 DECIMAL 相同 |
REAL | real |
SERIAL (n) | int |
SMALLFLOAT | 与 REAL 相同 |
SMALLINT | short |
TEXT | int (作为大对象 ID,没有输入流之外) |
VARCHAR (m,r) | string |
除了转换方法外,还提供了以下方法
- convertDateToDays()
- convertDaysToDate()
- rleapyear()
- widenByte()
convertDateToDays() 方法
convertDateToDays() 方法将 java.sql.Date 转换为一个 int 数据类型,该数据类型将 1900 年 1 月 1 日的日期编码为 1 。日期早于 1900 年 1 月 1 日的日期编码为负数。
方法签名
public static int convertDateToDays (java.sql.Date dt)
输入参数
dt
java.sql date。
convertDaysToDate() 方法
convertDaysToDate() 方法将日期转换为年、月或日。convertDaysToDate() 方法处理负天数,从 1899 年 12 月 31 日开始反向解释为 0。convertDaysToDate() 方法将 1900 年 1 月 1 日解释为 1。在 1 月 1 日之前是没有日期的,0000 是允许的。该方法依赖于 GBase 8s 生成的有效日期。
方法签名
public static java.sql.Date convertDaysToDate (int dt)
输入参数
dt
1900 年 1 月 1 日之后的天数(1900 年 1 月 1 日 为 1)。
IfxToJavaChar() 方法
IfxToJavaChar() 方法将 GBase 8s CHAR (n) 和 CHARACTER (n) 数据类型转换为 Java™ string 数据类型。转换是通过从给定字节创建一个字符串来实现的。
方法签名
public String IfxToJavaChar (byte b [], short prec,boolean encoption)
public String IfxToJavaChar (byte b [], boolean encoption)
public String IfxToJavaChar (byte b [], int offset, int length,short prec, boolean encoption)
public String IfxToJavaChar (byte b [], int offset, int length,boolean encoption)
public String IfxToJavaChar (byte b [], short prec, String dbEnc,boolean encoption)
public String IfxToJavaChar (byte b [], String dbEnc, boolean encoption) throws IOException
public String IfxToJavaChar (byte b [], int offset, int length,short prec,String dbEnc, boolean encoption)
public String IfxToJavaChar (byte b [], int offset, int length,String dbEnc, boolean encoption)
输入参数
b
字节编码数据。
dbEnc
JDK 编码。
offset
字节数组的偏移量。
prec
从 GBase 8s 接收的精度。
length
数据长度。
IfxToJavaDate() 方法
IfxToJavaDate() 方法将 GBase 8s DATE 数据类型转换为 Java™ java.sql.Date 数据类型。
方法签名
public static java.sql.Date IfxToJavaDate (byte b [], short prec)
public static java.sql.Date IfxToJavaDate (byte b [])
public static java.sql.Date IfxToJavaDate (byte b [], int offset,int length, short prec)
public static java.sql.Date IfxToJavaDate (byte b [], int offset)
输入参数
b
字节编码数据。
offset
字节数组的偏移量。
prec
从 GBase 8s 接收的精度。
length
数据长度。
IfxToJavaDateTime() 方法
IfxToJavaDateTime() 方法将 GBase 8s DATETIME 数据类型转换为 Java™ java.sql.Timestamp 数据类型。转换路径为 GBase 8s 到 decimal 到 timestamp。
方法签名
public static java.sql.Timestamp IfxToJavaDateTime (byte b [], short prec)
public static java.sql.Timestamp IfxToJavaDateTime (byte b [], int offset,int length, short prec)
public static java.sql.Timestamp IfxToJavaDateTime (byte b [], int offset,int length,
short prec, Calendar cal)
输入参数
b
字节编码数据。
offset
字节数组的偏移量。
prec
从 GBase 8s 接收的精度。
length
数据长度。
IfxToDateTimeUnloadString() 方法
IfxToDateTimeUnloadString() 方法将 GBase 8s DATETIME 数据类型转换为 Java™ string 数据类型,它的格式与 SQL LOAD/UNLOAD 格式相兼容。转换路径为 GBase 8s 到十进制到字符串。
方法签名
public static String IfxToDateTimeUnloadString (byte b [], int offset,int length, short prec)
输入参数
b
字节编码数据。
offset
字节数组的偏移量。
prec
从 GBase 8s 接收的精度。
length
数据长度。
IfxToJavaDecimal() 方法
IfxToJavaDecimal() 方法将 GBase 8s DECIMAL 数据类型转换为 Java™ java.lang.Bignum 数据类型。
方法签名
public static java.math.BigDecimal IfxToJavaDecimal (byte b [], short prec)
public static java.math.BigDecimal IfxToJavaDecimal (byte b [], int offset,int length, short prec)
输入参数
b
字节编码数据。
offset
字节数组的偏移量。
prec
从 GBase 8s 接收的精度。
length
数据长度。
IfxToJavaDouble() 方法
IfxToJavaDouble() 方法将 GBase 8s DOUBLE PRECISION 数据类型转换为 Java™ double 数据类型。
方法签名
public static double IfxToJavaDouble (byte b [], short prec)
public static double IfxToJavaDouble (byte b [])
public static double IfxToJavaDouble (byte b [], int offset, int length,short prec)
public static double IfxToJavaDouble (byte b [], int offset)
输入参数
b
字节编码数据。
offset
字节数组的偏移量。
prec
从 GBase 8s 接收的精度。
length
数据长度。
IfxToJavaInt() 方法
IfxToJavaInt() 方法将 GBase 8s INTEGER 数据类型转换为 Java™ int 数据类型。
方法签名
public static int IfxToJavaInt (byte b [], short prec)
public static int IfxToJavaInt (byte b [])
public static int IfxToJavaInt (byte b [], int offset, int length,short prec)
public static int IfxToJavaInt (byte b [], int offset)
输入参数
b
字节编码数据。
offset
字节数组的偏移量。
prec
从 GBase 8s 接收的精度。
length
数据长度。
IfxToJavaInterval() 方法
IfxToJavaInterval() 方法将 GBase 8s DATETIME 数据类型转换为 Java™ interval 数据类型。转换路径为 GBase 8s 到 decimal 到 interval。
方法签名
public static Interval IfxToJavaInterval (byte b [], short prec)
public static Interval IfxToJavaInterval (byte b [], int offset, int length,short prec)
输入参数
b
字节编码数据。
offset
字节数组的偏移量。
prec
从 GBase 8s 接收的精度。
length
数据长度。
IfxToJavaLongBigInt() 方法
IfxToJavaLongBigInt() 方法将 GBase 8s BIGINT 数据类型转换为 Java™ long 数据类型。
方法签名
public static long IfxToJavaLongBigInt(byte b [], short prec)
public static long IfxToJavaLongBigInt(byte b [])
public static long IfxToJavaLongBigInt(byte buf [], int offset,int length, short prec)
public static long IfxToJavaLongBigInt(byte b[], int offset)
输入参数
b 和 buff
字节编码数据。
offset
字节数组中的偏移量。
prec
从 GBase 8s 接收的精度。
length
数据长度。
IfxToJavaLongInt() 方法
IfxToJavaLongInt() 方法将 GBase 8s INT8 数据类型转换为 Java™ long 数据类型。
方法签名
public static long IfxToJavaLongInt(byte b [], short prec)
public static long IfxToJavaLongInt(byte b [])
public static long IfxToJavaLongInt(byte buf [], int offset, int length,short prec)
public static long IfxToJavaLongInt(byte buf [], int offset)
输入参数
b 和 buf
字节编码数据。
offset
字节数组的偏移量。
prec
从 GBase 8s 接收的精度。
length
数据长度。
IfxToJavaReal() 方法
IfxToJavaReal() 方法将 GBase 8s REAL 数据类型转换为 Java™ real 数据类型。
方法签名
public static float IfxToJavaReal (byte b [], short prec)
public static float IfxToJavaReal (byte b [])
public static float IfxToJavaReal (byte b [], int offset,int length, short prec)
public static float IfxToJavaReal (byte b [], int offset)
输入参数
b
字节编码数据。
offset
字节数组的偏移量。
prec
从 GBase 8s 接收的精度。
length
数据长度。
IfxToJavaSmallInt() 方法
IfxToJavaSmallInt() 方法将 GBase 8s SMALLINT 数据类型转换为 Java™ short 数据类型。
方法签名
public static short IfxToJavaSmallInt (byte b [], short prec)
public static short IfxToJavaSmallInt (byte b [])
public static short IfxToJavaSmallInt (byte b [], int offset,int length, short prec)
public static short IfxToJavaSmallInt (byte b [], int offset)
输入参数
b
字节编码数据。
offset
字节数组的偏移量。
prec
从 GBase 8s 接收的精度。
length
数据长度。
rleapyear() 方法
rleapyear() 方法确定年份是否为闰年。
方法签名
public static final boolean rleapyear(int yr)
widenByte() 方法
widenByte() 方法将 BYTE 移动到 short 数据类型中,使得高位不传播。
方法签名
protected static final short widenByte(byte b)
错误消息
-79700
Method not supported
GBase 8s JDBC Driver 不支持此 JDBC 方法。
-79702
Cannot create new object
软件无法为新的 String 对象分配内存。
-79703
Row/column index out of range
行或列索引超出范围。
比较索引和超出查询的行和列数,确保它在范围内。
-79704
Cant load driver
GBase 8s JDBC Driver 无法创建实例本身,并无法在 DriverManager 类中注册。SQLException 文本的剩余部分描述了哪里失败。
-79705
Incorrect URL format
您提交的数据库 URL 是无效的。GBase 8s JDBC Driver 无法识别此语法。
检查该语法并重新尝试。
-79706
Incomplete input
在将 String 值转换到 IntervalDF 或 IntervalYM 对象的过程中发现一个无效字符。
请查看 INTERVAL 数据类型 并获取正确的值。
-79707
Invalid qualifier
从原子元素构造 Interval 限定符时发出长度、起始值或结束值错误。
检查长度、起始值和结束来验证它们是否正确。请参阅 INTERVAL 数据类型 以获取正确的值。
-79708
Cannot take null input
您提供的字符串为空。在这种情况中,GBase 8s JDBC Driver 无法理解空输入。
请检查输入字符串,确保它具有适当的值。
-79709
Error in date format
预期输入的是以下格式的有效日期字符串: yyyy-mm-dd。
检查日期并确认它具有四位数的年份,后跟有效的两位数月份和两位数日期。分隔符必须是连字符(-)。
-79710
Syntax error in SQL escape clause
无效的语法被传送到一个 jdbc 转义子句。有效的 JDBC 转义子句语法通过大括号和关键字进行划分:{keyword syntax}。
检查 JDBC 规范以获取有效的转义子句关键字和语法。
-79711
Error in time format
无效的时间格式被传送到 JDBC 转义子句。时间字符的转义子句语法具有以下格式:{t 'hh:mm:ss'}。
-79712
Error in timestamp format
无效的时间戳格式被传送到 JDBC 转义子句。该时间戳字符的转义子句具有以下格式:{ts 'yyyy-mm-dd hh:mm:ss.f...'}。
-79713
Incorrect number of arguments
标量函数转义语法传递了不正确的参数。正确的语法是 {fn function(arguments)}。
验证正确数的参数传递给了此函数。
-79714
Type not supported
您指定了一个 GBase 8s JDBC Driver 不支持的特定数据类型。
检查您的查询确保使用的数据类型是受支持的。
-79715
Syntax error
无效的语法被传送到 jdbc 转义子句。有效的 JDBC 转义子句语法通过大括号和关键字进行划分:{keyword syntax}。
检查 JDBC 规范以获取有效的转义子句关键字和语法。
-79716
System or internal error
发生操作或运行系统错误或驱动程序内部错误。随后的消息描述了此问题。
-79717
Invalid qualifier length
Interval 对象的长度值不正确。
请参阅 INTERVAL 数据类型 以获取正确的值。
-79718
Invalid qualifier start code
Interval 对象的起始值错误。
请参阅 INTERVAL 数据类型 以获取正确的值。
-79719
Invalid qualifier end code
Interval 对象的结束值不正确。
请参阅 INTERVAL 数据类型 以获取正确的值。
-79720
Invalid qualifier start or end code
Interval 对象的起始值或结束值不正确。
请参阅 INTERVAL 数据类型 以获取正确的值。
-79721
Invalid interval string
在将 String 值转换为 IntervalDF 或 IntervalYM 对象过程中发生错误。请参阅 INTERVAL 数据类型 以获取正确的格式。
-79722
Numeric character(s) expected
在将 String 值转换为 IntervalDF 或 IntervalYM 对象过程中发生错误。请参阅 INTERVAL 数据类型 以获取正确的格式。
-79723
Delimiter character(s) expected
在将 String 值转换为 IntervalDF 或 IntervalYM 对象过程中发生错误。请参阅 INTERVAL 数据类型 以获取正确的格式。
-79724
Character(s) expected
在将 String 值转换为 IntervalDF 或 IntervalYM 对象过程中发生错误。完成转换前遇到 End of string 。
请参阅 INTERVAL 数据类型 以获取正确的格式。
-79725
Extra character(s) found
在将 String 值转换为 IntervalDF 或 IntervalYM 对象过程中发生错误。预期错误为 End of string,但是此字符串中有多余的字符。
请参阅 INTERVAL 数据类型 以获取正确的格式。
-79726
Null SQL statement
传入的 SQL 语句为空。
请检查您的应用程序的 SQL 语句字符串,以确保它包含有效的语句。
-79727
Statement was not prepared
SQL 语句还未准备好。如果您在 SQL 语句中使用主机变量(例如,insert into mytab values (?, ?);,则在执行该语句前,必须使用connection.prepareStatement() 准备此 SQL 语句。
-79728
Unknown object type
如果此对象类型是空的不透明类型,则此类型无法被识别和处理。如果对象类型是复杂类型,则集合中或数组中的数据是未知的类型,无法映射到GBase 8s 类型。如果此对象类型为行,则此行中的元素不能映射到 GBase 8s 类型。请验证该自定义类型映射或对象的数据类型。
-79729
Method cannot take argument
此方法无法使用此参数。请参阅 Java™ API 规范或该指南适当的章节来确保您正适当地使用方法。
-79730
Connection not established
连接未建立。
必须首先通过调用 DriverManager.getConnection() 或 DataSource.getConnection() 方法获取此连接。
-79731
MaxRows out of range
您具有一个超出范围的 maxRow 值。请确保您指定的值在 0 和 Integer.MAX_VALUE 之间。
-79732
Illegal cursor name
指定游标名称无效。请确保传入的字符串不是 NULL 或空。
-79733
No active result
该语句不包含有效的结果。请检查您的程序逻辑,确保您在尝试引用结果之前调用了 executeXXX() 方法。
-79734
GBASEDBTSERVER has to be specified
GBASEDBTSERVER 是连接到 GBase 8s 所需的属性。您可以在数据库 URL 中指定它或将它作为 Properties 对象的一部分传递给 connect() 方法。
-79735
Cant instantiate protocol
在尝试连接期间发出了内部错误。请联系技术支持。
-79736
No connection/statement establish yet
当前没有连接或语句不存在。
检查您的程序确保连接已适当建立或语句已创建。
-79737
No metadata
此 SQL 语句没有数据源可用。
请确保在尝试使用它之前该语句已生成了一个结果集。
-79738
No such column name
指定的列名不存在。请确保该列名是正确的。
-79739
No current row
游标位置不正确。您必须首先使用 ResultSet.next() 、ResultSet.beforeFirst() 、ResultSet.first() 或 ResultSet.absolute() 方法将游标放到结果集中。
-79740
No statement created
此语句不存在。请确保该语句已经创建。
-79741
Cannot convert to
无法将列的数据类型转换为指定的数据类型。实际的数据类型在该消息的末尾描述。
请检查您的程序逻辑确保您请求的转换是受支持的。请参阅映射数据类型获取数据映射数组。
-79742
Cannot convert from
无法将列的数据类型转换为指定的数据类型。实际的数据类型在该消息的末尾描述。
请检查您的程序逻辑确保您请求的转换是受支持的。请参阅映射数据类型获取数据映射数组。
-79744
Transactions not supported
用户尝试在不支持事务的数据库上调用 commit() 或 rollback(),或者已经在非日志记录的数据库上尝试将 autoCommit 设置为 False 。
请验证当前数据库具有正确的日志记录模式并检查此程序逻辑。
-79745
Read only mode not supported
GBase 8s 不支持只读模式。
-79746
No Transaction Isolation on non-logging db's
GBase 8s 不支持在非日志记录的数据库上设置事务隔离级别。
-79747
Invalid transaction isolation level
如果数据库服务器无法完成回滚,则发送此错误。请参阅 SQLException 消息的剩余部分,来了解回滚失败的详细原因。
如果无效的事务隔离级别传送到 setTransactionIsolation(),则该错误还会发生。有效值为:
TRANSACTION_NONE
TRANSACTION_READ_UNCOMMITTED
TRANSACTION_READ_COMMITTED
TRANSACTION_REPEATABLE_READ
TRANSACTION_SERIALIZABLE
TRANSACTION_LAST_COMMITTED
-79748
Cannot lock the connection
GBase 8s JDBC Driver 在与数据库服务器进行数据交换之前通常锁定此连接对象。驱动程序无法获取该锁。一次只能有一个线程使用此连接对象。
-79749
Number of input values does not match number of question marks
此语句中您使用 PreparedStatement.setXXX() 方法设置的变量数不符合您写入此语句的占位符 ? 数。
找到语句的文本并验证占位符的数量,然后检查对 PreparedStatement.setXXX() 的调用。
-79750
Method only for queries
如果语句是 SELECT 语句,则只能使用 Statement.executeQuery(String) 和 PreparedStatement.executeQuery() 方法。对于其它语句,请使用Statement.execute(String) 、Statement.executeBatch() 、Statement.executeUpdate(String) 、Statement.getUpdateCount()、Statement.getResultSet() 或 PreparedStatement.executeUpdate() 方法。
-79755
Object is null
传递的对象为空。请检查您的程序逻辑,确保引用的对象是有效的。
-79756
Must start with 'jdbc'
数据库 URL 的第一个令牌必须是关键字 jdbc(不区分大小写),如以下示例所示:
jdbc:gbasedbt-sqli://mymachine:1234/
mydatabase:user=me:
password=secret
-79757
Invalid subprotocol
当前有效的子协议是 gbasedbt-sqli。
-79758
Invalid IP address
当通过 IP 地址连接到 GBase 8s 数据库服务器时,该 IP 地址必须是有效的。有效的 IP 地址是一个四个 0 - 255 的集合,由点(.)分隔:例如,127.0.0.1。
-79759
Invalid port number
端口号必须是有效的四位数字,如下所示:
jdbc:gbasedbt-sqli://mymachine:1234/
mydatabase:user=me:
password=secret
在此示例中,1234 是端口号。
-79760
Invalid database name
该语句包含的数据库名称的格式无效。
数据库名和游标名称的最大长度取决于数据库服务器的版本。
数据库名和游标名必须以字母、数字和下划线字符开头。数据库名和游标名可以使用一个下划线开头。
在 MS-DOS 系统中,名称最大可以是八个字符加三个字符扩展。
-79761
Invalid property format
数据库 URL key=value 对中的值正确。例如,user=gbasedbt:password=gbasedbt 将 key=value 对添加到传送连接对象的属性列表。
检查 key=value 对的语法是否正确。确保只有一个 = 等号;没有空格分隔这些 key 、value 或 =;并且 key=value 对使用一个冒号(:)分隔,没有空格。
-79762
Attempt to connect to a non 5.x server
当连接到版本为 5.x 的数据库服务器时,用户必须将数据库 URL 设置 USE5SERVER 为非空值。如果连接到版本 6.0 或更高版本的数据库服务器时,抛出此异常。
请验证数据库服务的版本正确,并修改所需的数据库 URL。
-79764
Invalid fetch direction value
一个无效的访存方向被作为参数传送到 Statement.setFetchDirection() 或 ResultSet.setFetchDirection() 方法。有效值为 FETCH_FORWARD 、FETCH_REVERSE 和 FETCH_UNKNOWN。
-79765
ResultSet type is TYPE_FETCH_FORWARD, direction can only be FETCH_FORWARD
如果结果集类型设置为 TYPE_FORWARD_ONLY,但是 setFetchDirection() 方法已经被其它值而不是 FETCH_FORWARD 调用。指定的方向必须与指定的结果集类型一致。
-79766
Incorrect fetch size value
使用无效值调用 Statement.setFetchSize() 方法。验证传入的值是大于 0 的。如果 setMaxRows() 方法已经被调用,则访存大小不能超出此值。
-79767
ResultSet type is TYPE_FORWARD_ONLY
调用了诸如 ResultSet.beforeFirst() 、ResultSet.afterLast(), ResultSet.first() 、ResultSet.last() 、ResultSet.absolute() 、ResultSet.relative()、ResultSet.current() 或 ResultSet.previous() 这样的方法,但是结果集类型为 TYPE_FORWARD_ONLY。如果结果集类型是 TYPE_FORWARD_ONLY ,则只能调用 ResultSet.next() 方法。
-79768
Incorrect row value
ResultSet.absolute(int) 方法被值 0 调用。参数必须大于 0。
-79769
A customized type map is required for this data type
您必须注册一个自定义类型映射来使用任何不透明类型。
-79770
Cannot find the SQLTypeName specified in the SQLData or Struct
SQLData 或 Struct 类中指定 SQLTypename 对象在数据库中不存在。请确保类型名称有效。
-79771
Input value is not valid
此数据类型不接受此输入值。请确保此输入值是对该数据类型是一个有效输入。
-79772
No more data to read or write. Verify your SQLData class or getSQLTypeName()
当 Java™ 用户定义的例程试图读或设置超出数据输入流中可用的不透明类型数据末尾的位置时,会发生此错误。
请仔细检查数据输入 UDR 代码的不透明类型的长度和结构。getSQLTypeName() 方法返回的 SQLTypeName 对象也可能不正确。
-79774
Unable to create local file
从数据库服务器读取的大对象可以存储在内存或本地文件中。如果 LOBCACHE 值为 0 或者大对象大小大于 LOBCACHE 值,则来自数据库服务器的大对象数据通常存储在文件中。在这种情况下,如果发生安全异常,则 GBase 8s JDBC Driver 不会尝试将大对象存储到内存中,并抛出此异常。
-79775
Only TYPE_SCROLL_INSENSITIVE and TYPE_FORWARD_ONLY are supported
GBase 8s JDBC Driver 仅支持 TYPE_SCROLL_INSENSITIVE 和 TYPE_FORWARD_ONLY 的结果集类型。只能使用这些值。
-79776
Type requested (%s) does not match row type information (%s) type
从系统目录或行定义获取行类型信息。提供的行数据与该行的元素类型不匹配。必须修改类型信息或必须提供数据。
-79777
readObject/writeObject() only supports UDTs, Distincts, and complex types
为不是用户定义、DISTINCT 或复制类型的对象调用 SQLData.writeObject() 方法。
请验证您提供的自定义类型映射信息。
-79778
Type mapping class must be a java.util.Collection implementation
提供了一个类型映射以重写缺省的 SET 、LIST 或 MULTISET 数据类型,但是类不能实现 java.util.Collection 接口。
-79780
Data within a collection must all be the same Java™ class and length
请验证集合中的所有对象都是相同的类。
-79781
Index/Count out of range
使用索引和计数值调用 Array.getArray() 或 Array.getResultSet() 。索引超出范围或计数值太大。
请验证数组中的元素数满足索引和计数值。
-79782
Method can be called only once
请确保每个结果只调用一次诸如 Statement.getUpdateCount() 和 Statement.getResultSet() 之类的方法。
-79783
Encoding or code set not supported
DB_LOCALE 或 CLIENT_LOCALE 变量中输入的编码或代码集无效。
请参阅支持代码集转换,获取有效的代码集。
-79784
Locale not supported
DB_LOCALE 或 CLIENT_LOCALE 变量中输入的语言环境无效。
请参阅支持代码集转换,获取有效的语言环境。
-79785
Unable to convert JDBC escape format date string to localized date string
日期值的 JDBC 转义格式必须指定为 {d 'yyyy-mm-dd'} 格式。请验证指定的 JDBC 转义格式是否正确。
如果这些环境变量中的任何一个设置为连接数据库 URL 字符串或属性列表中的值,则请验证 DBDATE 和 GL_DATE 设置是否具有正确的日期字符串格式。
-79786
Unable to build a Date object based on localized date string representation
在 CHAR 、VARCHAR 或 LVARCHAR 列中指定的日期字符串表示形式不正确,日期对象不能基于年、月和日的值建立。
如果这些环境变量中的任何一个设置为连接数据库 URL 字符串或属性列表中的值,则请验证日期字符串表示形式符合 DBDATE 或 GL_DATE 日期格式。如果指定了 DBDATE 或 GL_DATE ,但是在连接数据库 URL 字符串或属性列表中显式设置了 CLIENT_LOCALE 或 DB_LOCALE,则请验证日期字符串表示形式与 JDK short 缺省格式(DateFormat.SHORT)相匹配。
-79788
User name must be specified
需要用户名建立与 GBase 8s JDBC Driver 的连接。
请确保您在数据库 URL 或属性中包含了 user=your_user_name。
-79789
Server does not support GLS variables DB_LOCALE, CLIENT_LOCALE or GL_DATE
这些变量只能在支持 GLS 的数据库服务器中使用。
如果不支持,检查您的数据库服务器版本文档,并忽略这些变量。
-79790
Invalid complex type definition string
getSQLTypeName() 方法返回的值为空或无效。
请检查此字符串确保它是一个有效的命名行名称或是一个有效的行类型定义。
-79792
Row must contain data
Array.getAttributes() 或 Array.getAttributes(Map) 方法返回 0 元素,这些方法必须返回一个非零数。
-79793
Data in array does not match getBaseType() value
Array.getArray() 或 Array.getArray(Map) 方法返回的数组中的元素类型与 JDBC 基本类型不匹配。
-79794
Row length provided (%s) does not match row type information (%s)
行中的数据与行类型信息中的长度不匹配。不需要截断此字符串长度来符合行定义的长度,但是其它数据类型的长度必须符合。
-79795
Row extended ID provided (%s) does not match row type information (%s)
行中对象扩展 ID 与行类型信息中定义的扩展 ID 不匹配。
可以更改行类型信息(如果您提供了行定义)或检查类型映射信息。
-79796
Cannot find UDT, distinct, or named row (%s) in database
getSQLTypeName() 方法返回的名称在数据库中找不到。
请验证 Struct 或 SQLData 对象返回了正确的信息。
-79797
DBDATE setting must be at least four characters and no longer than six characters
由于传递到数据库服务器的 DBDATE 格式具有太多或太少的字符,会发生此错误。
要修复此文件,请使用用户手册验证 DBDATE 格式字符串,确保年、月、日以及 DBDATE 字符串的每个部分都正确标识。
-79798
A numeric year expansion is required after 'Y' character in DBDATE string
发生此错误是因为 DBDATE 格式字符有一个年指示符(由字符 Y 指定),但是年指示符之后没有表示数字年份扩展值的字符(2 或 4)。
要修复此问题,请修改 DBDATE 格式字符串,使其在 Y 字符之后包含所需的数字年份扩展。Y 字符只能跟随字符 2 或 4。
-79799
An invalid character is found in the DBDATE string after the 'Y' character
发生此错误是因为 DBDATE 格式字符有一个年指示符(由字符 Y 指定),但是年指示符之后的字符不是 2(两位数的年份)或 4(四位数的年份)。
要修复此问题,请修改 DBDATE 格式字符串,使其在 Y 字符之后包含所需的数字年份扩展。Y 字符只能跟随字符 2 或 4。
-79800
No 'Y' character is specified before the numeric year expansion value
发生此错误是因为 DBDATE 格式字符串具有一个数值年扩展( 2 表示两位数年份或 4 表示四位数年份),但是指定数字年份扩展字符前没有找到年份指定符(Y)。
要修复此问题。请修改 DBDATE 格式字符串,使其在请求的数字年份扩展值之前包含所需的 Y 字符。
-79801
An invalid character is found in DBDATE format string
发生此错误的原因是 DBDATE 格式字符串具有不被允许的字符。
要修复此问题,请修改 DBDATE 格式字符串,使其仅包含正确的日期部分:年(Y),数值年份扩展值(2 或 4),月(M)和日(D)。或者,可以在 DBDATE 格式字符串的末尾指定纪元名称(E)和一个缺省的分隔符(连字符、点或反斜杠)。有关正确的 DBDATE 格式字符串的表示,请参阅用户文档。
-79802
Not enough tokens are specified in the string representation of a date value
发生此错误是因为指定的日期字符串的标记或分隔符数不够,不能成为一个有效的日期值。例如,12/15/98 是有效的日期字符串表示形式,它具有反斜杠作为分隔符或标记。而 12/1598 则是无效的日期字符串表示形式,因为没有足够的分隔符或标记。
要修复此问题,请修改日期字符串表示形式,使其包含有效的格式。
-79803
Date string index out of bounds during date format parsing to build Date object
发生此错误是因为 DBDATE 或 GL_DATE 要求的日期字符串格式与您定义的实际日期字符串表示形式之间不存在一对一的对应关系。例如,如果将GL_DATE 设置为 %b %D %y,而指定了字符串 Oct,则 GL_DATE 所需的格式与实际日期字符串之间存在明显的不匹配。
要修复此问题,请修改 DBDATE 或 GL_DATE 设置的日期字符串表示形式,以便指定的日期格式与所需的日期字符串表示形式一一对应。
-79804
No more tokens are found in DBDATE string representation of a date value
发生此错误的原因是指定的日期字符串没有更多所需的标记或分隔符来基于 DBDATE 格式字符串形成一个有效的日期值(由年、月和日组成)。例如,当 DBDATE 设置为 MDY2/ 时 12/15/98 是有效的日期字符串表示形式。但是 12/1598 是一个无效的日期字符串表示形式,因为没有足够多的分隔符或标记。
要修复此问题,请修改日期字符串表示形式,使其包含有效的格式,基于 DBDATE 格式字符串设置来分隔日期值的日、月和年部分。
-79805
No era designation found in DBDATE/GL_DATE string representation of date value
发生此错误的原因是指定的日期字符串的纪元名称无效,如不符合 DBDATE 或 GL_DATE 格式字符串设置的要求。例如,如果将 DBDATE 设置为Y2MDE-,但是用户指定的日期字符串表示法为 98-12-15,这是错误的,因为在此日期字符串值的末尾没有指定纪元。
要修复此问题,请修改此字符串表示法以包含基于 DBDATE 或 GL_DATE 格式字符串设置的有效纪元名称。在这个例子中,根据语言环境,98-12-15 AD 的日期字符串表示形式才是正确的。
-79806
Numerical day value can not be determined from date string based on DBDATE
发生此错误的原因是指定的日期字符串不具有 DBDATE 格式字符串设置所需的有效的天数。例如,如果 DBDATE 设置为 Y2MD-,但是指定的日期字符串表示形式是 98-12-blah,这是错误的,因为 blah 不是一个有效的天数表示形式。
要修复此问题,请修改日期字符串的表示形式,使其包含基于 DBDATE 格式字符串设置的有效数字天数(从 1 到 31)。
-79807
Numerical month value can not be determined from date string based on DBDATE
发生此错误是由于指定的日期字符串不具有 DBDATE 格式字符串所需的有效的数值月份指示符。例如,如果 DBDATE 设置为 Y2MD-,但是您指定的日期字符串表示形式为 98-blah-15,这是错误的,因为 blah 是一个无效的数值月份表示形式。
要修复此问题,请修改此日期字符串,使其包含基于 DBDATE 格式字符串设置的有效的数值月份(从 1 到 12)。
-79808
Not enough tokens specified in %D directive representation of date string
发生此错误的原因是指定的字符串没有正确数量的标记或分隔符来构成基于 GL_DATE %D 指令(mm/dd/yy 格式)的有效日期值。例如,12/15/98 是基于 GL_DATE%D 指令的有效的字符串表示形式,但是 12/1598 是一个无效的字符串表示形式,因为没有足够的分隔符或标记。
要修复此问题,请修改日期字符串表示形式,使其包含 GL_DATE%D 指令的有效格式。
-79809
Not enough tokens specified in %x directive representation of date string
发生错误的原因是因为指定的日期字符串没有根据 GL_DATE %x 指令形成有效的日期值的正确数量的标记或分隔符,(所需的格式是基于日、月、年的部分,以及这些部分的顺序是由指定的语言环境决定的)例如,12/15/98 是基于美国英语语言环境设置的 GL_DATE %x 指令的有效日期字符串表示形式,但 12/1598 不是有效的日期字符串表示形式,因为没有足够的分隔符或标记。
要修复此问题,请修改此字符表示形式,使其包含基于语言环境的 GL_DATE %x 指令的有效格式。
-79811
Connection without user/password not supported
调用 getConnection() 方法的 DataSource 对象时,用户名称或密码为空。
使用 getConnection() 方法的用户名称和密码参数或在 DataSource 对象中设置这些值。
-79812
User/Password does not match with datasource
调用 getConnection(user, passwd) 方法的 DataSource 对象时,您提供的值与数据源中的值不匹配。
-79814
Blob/Clob object is either closed or invalid
如果你您使用 ResultSet.getBlob() 或 ResultSet.getClob()方法检索智能大对象或使用 IfxBlob() 或 IfxCblob() 构造函数创建智能大对象,则该智能大对象是打开的。可以读/写智能大对象。在执行 IfxBlob.close() 方法之前,不要使用智能大对象进行进一步的读/写操作,否则会抛出此异常。
-79815
Not in Insert mode. Need to call moveToInsertRow() first
您尝试使用 insertRow() 方法,但是此模式未设置为 Insert。
调用 insertRow() 之前,请调用 moveToInsertRow() 方法。
-79816
Cannot determine the table name
查询中的表名不正确或引用的表不存在。
-79817
No serial, rowid, or primary key specified in the statement
可更新可滚动功能仅适用于在查询中指定了具有 SERIAL 列、主键或行 ID 的表。如果表没有这些属性,则会创建一个可更新的可滚动的游标。
-79818
Statement concurrency type is not set to CONCUR_UPDATABLE
试图为尚未使用 CONCUR_UPDATABLE 并发类型创建的语句调用 insertRow() 、updateRow() 或 deleteRow() 方法。
用这个并发属性设置的类型重新创建语句。
-79819
Still in Insert mode. Call moveToCurrentRow() first
您不能在 Insert 模式中调用 updateRow() 或 deleteRow() 方法。请先调用 moveToCurrentRow() 方法。
-79820
Function contains an output parameter
您传送了一个包含 OUT 参数的语句,但是没有使用驱动程序 CallableStatement.registerOutParameter() 和 getXXX() 方法处理该 OUT 参数。
-79821
Name unnecessary for this data type
如果具有一个需要名称的数据类型(不透明类型或复杂类型),您必须调用具有该名称参数的方法,如下所示:
public void IfxSetNull(int i, int ifxType,
String name)
public void registerOutParameter
(int parameterIndex,
int sqlType, java.lang.String name);
public void IfxRegisterOutParameter
(int parameterIndex,
int ifxType, java.lang.String name);
您指定的数据类型不需要名称。
使用没有类型参数的另一个方法。
-79822
OUT parameter has not been registered
使用 CallableStatement 接口指定的函数有一个尚未注册的 OUT 参数。
在调用 executeQuery() 方法之前,使用 registerOutParameter() 或 IfxRegisterOutParameter() 方法注册 OUT 参数类型。
-79823
IN parameter has not been set
使用 CallableStatement 接口定义指定的函数具有一个未设置的 IN 参数。
如果您想要设置一个 NULL IN 参数,则调用 setMaxRows() 或 IfxSetNull() 方法。否则,调用从 PreparedStatement 接口继承的任一集合方法。
-79824
OUT parameter has not been set
使用 CallableStatement 接口指定的函数具有还未设置的 OUT 参数。
如果您想要设置一个 NULL OUT 参数,则调用 setMaxRows() 或 IfxSetNull() 方法。否则,调用从 PreparedStatement 接口继承的任一设置方法。
-79825
Type name is required for this data type
此数据类型是不透明类型、distinct 类型或复杂类型,它需要一个名称。
使用 IN 参数的设置方法,并为以类型名称作为参数的 OUT 参数注册方法。
-79826
Ambiguous java.sql.Type, use IfxRegisterOutParameter()
指定的 SQL 类型没有映射到 GBase 8s 数据类型,或者具有多个映射。
使用 IfxRegisterOutParameter() 方法之一指定 GBase 8s 数据类型。
-79827
Function doesn't have an output parameter
该函数没有 OUT 参数,或该函数具有的 OUT 参数值是服务器版本不返回的。CallableStatement 接口中的方法都不适用。使用PreparedStatement 接口的继承方法。
-79828
Function parameter specified isnt an OUT parameter
GBase 8s 函数只能具有一个 OUT 参数,它通常为最后一个参数。
-79829
Invalid directive used for the GL_DATE environment variable
不允许使用 GL_DATE 环境变量指定的一个或多个指令。有关 GL_DATE 变量的有效指令列表,请参阅 GL_DATE 格式。
-79830
Insufficient information given for building a time or timestamp Java™ object.
要为构建 java.sql.Timestamp 或 java.sql.Time 对象正确执行字符串到二进制的转换,必须为所选日期字符串表示指定所有 DATETIME 字段。对于java.sql.Timestamp 对象,必须在字符串中指定年、月、日,小时,分钟和秒部分。对于 java.sql.Time 对象,必须在字符串表示中指定小时、分钟和秒部分。
-79831
Exceeded maximum no. of connections configured for Connection Pool Manager
如果您在不关闭连接的情况下,使用 DataSource 对象重复连接数据库,则连接累积。当 DataSource 对象的连接的总数超出最大限制(100)时,会抛出此异常。
-79834
Distributed transactions (XA) are not supported by this database server.
当用户调用服务器不支持的 XAConnection.getConnection() 方法时,会发生此错误。
-79836
Proxy Error: No database connection
如果您尝试使用一个无效或坏的数据库连接与数据库通信,则 GBase 8s HTTP Proxy 会抛出此错误。
请确保您的应用程序已经打开到数据库的连接,检查您的网络服务器和数据库错误日志。
-79837
Proxy Error: Input/output error while communicating with database
如果在代理服务器与数据库通信时检测到错误,则 GBase 8s HTTP Proxy 可能抛出此错误。如果您的数据库服务器不可访问,也可能发生此错误。
请确保您的数据库服务器是可以访问的,检查您的数据库和网络服务器错误日志。
-79838
Cannot execute change permission command (chmod/attrib)
驱动程序无法更改客户端 JAR 文件的权限。如果您的客户端平台不支持 chmod 或 attrib 命令,或者如果用户运行的 JDBC 应用程序不具有权限更改客户端 JAR 文件的访问权限,则可能发生此错误。
请确保您的平台上的 chmod 或 attrib 命令是有效的,并且应用程序的用户具有更改客户端 JAR 文件的访问权限的权利。
-79839
Same Jar SQL name already exists in the system catalog
当应用程序调用 UDTManager.createJar() 时指定 JAR 文件名已经在数据库服务器中注册过。
使用 UDTMetaData.setJarFileSQLName() 为 JAR 文件指定一个不同的 SQL 名称。
-79840
Unable to copy jar file from client to server
使用 setJarTmpPath() 设置的路径名不能被用户 gbasedbt 或 JDBC 连接中指定的用户写入。
请确保路径名是可靠的,可以被任何用户写入。
-79842
No UDR information was set in UDRMetaData
应用程序调用 UDRManager.createUDRs() 方法,但没有为要注册的数据库服务器指定任何 UDR。
在调用 UDRManager.createUDRs() 方法之前,调用 UDRMetaData.setUDR() 为数据库服务器指定 UDR 。
-79843
SQL name of the jar file was not set in UDR/UDT MetaData
应用程序调用 UDTManager.createUDT() 或 UDRManager.createUDRs() 方法,而没有为包含要注册的数据库服务器的不透明类型或 UDR 的 JAR 文件指定 SQL 名称。
在调用 UDTManager.createUDT() 或 UDRManager.createUDRs() 方法之前,通过调用 UDTMetaData.setJarFileSQLName() 或UDRMetaData.setJarFileSQLName() 方法为 JAR 文件指定 SQL 名称。
-79844
Cant create/remove UDT/UDR as no database is specified in the connection
应用程序建立了一个连接,但没有指定数据库。以下示例建立了连接并打开了名为 test 的数据库:
url = "jdbc:gbasedbt-sqli:myhost:1533/test:"
"gbasedbtserver=myserver;user=rdtest;
password=test";
conn = DriverManager.getConnection(url);
下列示例建立了一个没有数据库打开的连接:
url = "jdbc:gbasedbt-sqli:myhost:1533:"
"gbasedbtserver=myserver;user=rdtest;
password=test";
conn = DriverManager.getConnection(url);
要解决此问题,请在建立连接之后调用 createUDT() 或 createUDRs() 方法之前使用以下 SQL 语句:
Statement stmt = conn.createStatement();
stmt.executeUpdate("create database test
...");
相反,使用以下代码:
stmt.executeUpdate("database test");
-79845
JAR file on the client does not exist or cant be read
由于以下原因发生此错误:
创建客户端 JAR 文件失败。
为客户端 JAR 文件指定了错误的路径名。
运行 JDBC 应用程序的用户或在连接中指定的用户没有权限打开或读取客户端 JAR 文件。
-79846
Invalid JAR file name
应用程序指定为 UDTManager.createUDT() 或 UDRManager.createUDRs() 的第二个参数的客户端 JAR 文件必须以 .jar 扩展名结束。
-79847
The 'javac' or 'jar' command failed
驱动程序遇到了以下任一情况就会发生此错误:
使用 jar 命令将 .class 文件编译为 .jar 文件,以响应 JDBC 应用程序中的 createJar() 命令
使用 javac 和 jar 命令将 .java 文件编译为 .class 文件和 .jar 文件,以响应 JDBC 应用程序中的 UDTManager.createUDTClass() 命令。
-79848
Same UDT SQL name already exists in the system catalog
应用程序调用 UDTMetaData.setSQLName() 指定了一个已经在数据库服务器中存在的名称。
-79849
UDT SQL name was not set in UDTMetaData
应用程序调用 UDTMetaData.setSQLName() 为不透明类型指定 SQL 名称失败。
-79850
UDT field count was not set in UDTMetaData
应用程序调用了 UDTManager.createUDTClass(),但是之前没有指定定义此不透明类型的内部数据结构中的字段数。
调用 UDTMetaData.setFieldCount() 指定字段数。
-79851
UDT length was not set in UDTMetaData
应用程序调用了 UDTManager.createUDTClass(),而之前没有为为不透明类型指定长度。
调用 UDTMetaData.setLength() 指定此不透明类型的总长度。
-79852
UDT field name or field type was not set in UDTMetaData
应用程序调用了 UDTManager.createUDTClass(),但是没有先为数据结构中定义不透明类型的每个字段指定字段名称和数据类型。
通过调用 UDTMetaData.setFieldName() 指定字段名称;调用 UDTMetaData.setFieldType() 指定字段类型。
-79853
No class files to be put into the jar
应用程序调用 createJar() 方法并为此 classnames 参数传递了一个零长度的字符串。该方法签名如下所示:
createJar(UDTMetaData mdata, String[]
classnames)
-79854
UDT java class must implement java.sql.SQLData interface
应用程序调用 UDTManager.createUDT() 创建不透明类型,其类定义没有实现 java.sql.SQLData 接口。UDTManager 无法从没有实现此接口的类中创建不透明类型。
-79855
Specified UDT java class is not found
应用程序调用了 UDTManager.createUDT() 方法但是未找到您为第三方参数指定的名称的类。
-79856
Specified UDT does not exists in the database.
应用程序调用了 UDTManager.removeUDT(String sqlname) 从数据库移除名为 sqlname 的不透明类型,但是具有此名称的不透明类型在数据库中不存在。
-79857
Invalid support function type
仅当应用程序调用 UDTMetaData.setSupportUDR() 方法并将不是 0 到 7 之间的整数作为 type 参数传送时,会发生此错误。
使用定义了支持 UDR 常量。有关更多信息,请参阅 setSupportUDR() 和 setUDR() 方法。
-79858
The command to remove file on the client failed
如果没有调用 UDTMetaData.keepJavaFile() 或将它设置为 FALSE,则驱动程序在执行 UDTManager.createUDTClass() 方法时移除已生成的 .java文件。如果驱动程序无法移除 .java 文件,则会发生错误。
-79859
Invalid UDT field number
应用程序定义了 UDTMetaData.setXXX() 或 UDTMetaData.getXXX() 方法并指定字段数小于 0 或者大于 UDTMetaData.setFieldCount() 方法设置的值。
-79860
Ambiguous java type(s) - can't use Object/SQLData as method argument(s)
要注册为 UDR 的方法一个或多个参数的类型为 java.lang.Object 或 java.sql.SQLData。这些 Java™ 数据类型可以映射到多个 GBase 8s 数据类型,因此,驱动程序无法选择类型。
避免使用 java.lang.Object 或 java.sql.SQLData 作为方法参数。
-79861
Specified UDT field type has no Java™ type match
应用程序调用了 UDTMetaData.setFieldType() 并指定了一个在 Java 中没有 100% 匹配的数据类型。以下数据类型在此类别中:
IfxTypes.IFX_TYPE_BYTE
IfxTypes.IFX_TYPE_TEXT
IfxTypes.IFX_TYPE_VARCHAR
IfxTypes.IFX_TYPE_NVARCHAR
IfxTypes.IFX_TYPE_LVARCHAR
请使用 IFX_TYPE_CHAR 或 IFX_TYPE_NCHAR;这些数据类型映射到 java.lang.String。
-79862
Invalid UDT field type
应用程序调用了 UDTMetaData.setFieldType() 并为不透明类型指定了不支持的数据类型。有关支持的数据类型,请参阅映射字段类型。
-79863
UDT field length was not set in UDTMetaData
应用程序通过调用 UDTMetaData.setFieldType() 指定了一个字符型、日期时间型或 interval 类型的字段,但是指定字段长度时失败。调用UDTMetaData.setFieldLength() 来设置字段长度。
-79864
Statement length exceeds the maximum
应用程序发出了一个长度大于数据库服务器可以处理的 SQL PREPARE 、DECLARE 或 EXECUTE IMMEDIATE 语句。该限制根据实现方式会有所不同。但是大多数情况下,最长为 32,000 个字符。
检查程序逻辑确保错误不会导致程序显示比预期更长的字符串。如果文本具有预期的长度,则修改应用程序,一次显示更少的语句。
它与数据库服务器返回的 -460 错误相同。
-79865
Statement already closed
当应用程序在 stmt.close() 方法后尝试访问一个语句方法时,会发生此错误。
79868
Result set not open, operation not permitted
当应用程序尝试在 ResultSet.close() 方法后访问 ResultSet 方法,会发生此错误。
-79877
Invalid parameter value for setting maximum field size to a value less than zero
当应用程序尝试将最大字段大小设置为小于零的值时,会发生此错误。
-79878
Result set not open, operation next not permitted. Verify that autocommit is OFF
当应用程序在不执行结果集查询时尝试访问 ResultSet.next() 方法,会导致此错误。
-79879
An unexpected exception was thrown. See next exception for details
当出现非 SQL 异常时会发生此错误;例如,IO 异常。
-79880
Unable to set JDK Version for the Driver
当驱动程序无法从 Java™ 虚拟机获得 JDK 版本时,会发生此错误。
-79881
Already in local transaction, so cannot start XA transaction
在处理本地事务期间,当应用程序尝试启动 XA 事务时,会发生此错误。